我正在尝试使用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,则查询运行正常,结果集头也是正确的。
或者这不起作用?
感谢您提供任何帮助,抱歉提出这样一个微不足道的问题,但您不会相信这些东西对谷歌来说有多难。或者我只是不好看。
答案 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;