自定义结果集列的SQL顺序

时间:2017-03-10 12:36:41

标签: sql oracle

我正在尝试使用order-by语句对多个union选择进行分组。 (不是GROUP BY组,而是视觉分组)

考虑一下:

SELECT 'First Query' QRY, Field1, Field2
    FROM Tabl1
    WHERE Field1 <= 5
UNION ALL
SELECT 'Second Query', Field1, Field2
    FROM Tabl1
    WHERE Field1 >5 
ORDER BY QRY, Field1;

当我尝试在oracle数据库上运行这样的查询时,我得到ORA-00904: "QRY": invalid identifier。我的语法有问题吗?我是否需要为每个UNION ALL限定列标识符?如果我不包含ORDER BY,则查询运行正常,结果集头也是正确的。

或者这不起作用?

感谢您提供任何帮助,抱歉提出这样一个微不足道的问题,但您不会相信这些东西对谷歌来说有多难。或者我只是不好看。

1 个答案:

答案 0 :(得分:1)

一种解决方案是使用子查询:

SELECT t.*
FROM ((SELECT 'First Query' as QRY, Field1, Field2
       FROM Tabl1
       WHERE Field1 <= 5
      ) UNION ALL
      (SELECT 'Second Query', Field1, Field2
       FROM Tabl1
       WHERE Field1 > 5 
      )
     ) t
ORDER BY QRY, Field1;

union all中,字段来自第一个查询。

当然,这完全没必要,因为你可以在一个查询中完成所有这些:

select (case when field1 <= 5 then 'First Query' else 'Second Query' end) as qry,
        field1, field2
where field1 is not null
order by qry, field1;

实际上,order by qry也是不必要的。它是多余的,因为该值基于field1

select (case when field1 <= 5 then 'First Query' else 'Second Query' end) as qry,
        field1, field2
where field1 is not null
order by field1;