淘先锋技术网

首页 1 2 3 4 5 6 7

我有下面的场景(下表),我想根据它们是否为NULL来选择'X'或'Y'。Oracle UNION ALL在查询中保留记录的顺序

X Y pick

null not null Y

not null not null X

not null null X

包含数据的 'X' 和 'Y' 或UNION行ALLed象下面这样:

select 'X' as a

union all

select 'Y' as a

所以,我想,得到了下面的SQL,但不知道的“ROWNUM < = 1 “部分。如果UNION ALL保留 我查询两行的顺序,这将起作用(对于X和Y都不为空的情况)。

select a from

(

select 'X' as a

union all

select 'Y' as a

) where a is not null and rownum<=1;

select a from

(

select null as a

union all

select 'Y' as a

) where a is not null and rownum<=1;

select a from

(

select 'X' as a

union all

select null as a

) where a is not null and rownum<=1;

是上述正确的方式去做这件事吗?任何有识之士将不胜感激

2011-08-01

komedit1

+1

“UNION”或“UNION ALL”的结果是一个集合。集*没有*订单。即使你在简单的测试中观察到明显的顺序,你也不应该依赖这样的命令。 –