问题描述
我有查询像:
如果满足条件,如何返回两列?
简短的答案是你不能。更长的答案是你可以做这样的事情:
-用已知的分隔符将所有列连接成一列。然后把它们分开
-将值加载到XML文档并根据需要提取
等等。
但是这些都很麻烦。它通常更容易有两个案例表达式,第二个返回null在else:
select case when 1 in (1,2,3) then (select 'abc' as "name 1",'xyz' as "name 2" from dual) else 'pqr' end from dual;
如果满足条件,如何返回两列?
简短的答案是你不能。更长的答案是你可以做这样的事情:
-用已知的分隔符将所有列连接成一列。然后把它们分开
-将值加载到XML文档并根据需要提取
select case
when 1 in ( 1, 2, 3 ) then
xmltype ( cursor (
select 'abc' as "name 1", 'xyz' as "name 2"
from dual
else xmltype ( cursor (
select 'pqr' as "name 1"
from dual
from dual;
CASEWHEN1IN(1,2,3)THENXMLTYPE(CURSOR(SELECT'ABC'AS"NAME1",'XYZ'AS"NAME2"FROMDUAL))ELSEXMLTYPE(CURSOR(SELECT'PQR'AS"NAME1
------------------------------------------------------------------------------------------------------------------------
等等。
但是这些都很麻烦。它通常更容易有两个案例表达式,第二个返回null在else:
select case
when 1 in ( 1, 2, 3 ) then
'abc'
else 'pqr'
end "name 1",
when 1 in ( 1, 2, 3 ) then
'xyz'
else null
end "name 2"
from dual;