0

我有以下 oracle 查询:

SELECT
    table_to_check.managed_system_serial,
    CASE
        WHEN infraprod.aix_servers.managed_system_serial IS NULL THEN
            'NO'
        ELSE
            'YES'
    END serial_exists,
    name
FROM
    (
        SELECT
            column_value managed_system_serial
        FROM
            TABLE ( sys.odcivarchar2list('BW020', 'D761P', '22DFW', 'BW020') )
    ) table_to_check
    LEFT JOIN infraprod.aix_servers ON table_to_check.managed_system_serial = infraprod.aix_servers.managed_system_serial

运行上面的结果是:

在此处输入图像描述

我试图让 MANAGED_SYSTEM_SERIAL 列按顺序出现,因为序列号已经在列表中。我想要实现的是:

MANAGED_SYSTEM_SERIAL  NAME     SERIAL_EXISTS
BW020                                NO
D761P                 gmp3dr         YES
22DFW                 PROM1VIOS2     YES
22DFW                 PROM1VIOS1     YES
22DFW                 promdb1        YES
BW020                                NO

*以上连续剧只是一个样本。实际数字总共约为1000。

**每个序列可能有多个条目,但这不是问题,我只需要让它们出现在排序的结果中,因为它们在此列表中:

(
    'BW020',
    'D761P',
    '22DFW',
    'BW020'
)

由于我对 SQL 的了解几乎为零,这困扰了我一个星期,我找不到合适的解决方案。

任何帮助是极大的赞赏。

4

2 回答 2

2

包含rownum在内部查询中并使用它对输出进行排序:

select t.managed_system_serial, name, 
        case when a.managed_system_serial is null then 'NO' else 'YES' end SERIAL_EXISTS
  from (
    select rownum rn, column_value managed_system_serial 
      from table(sys.odcivarchar2list('BW020', 'D761P', '22DFW', 'BW020'))) t
  left join aix_servers a on a.managed_system_serial = t.managed_system_serial
  order by t.rn

dbfiddle 演示

于 2020-02-21T16:17:58.330 回答
0

你只是在寻找order by吗?

order by MANAGED_SYSTEM_SERIAL
于 2020-02-21T15:03:35.907 回答