是否可以在DB2中对单个CASE评估返回多列? 下面的查询返回单列。
select (case when 1=1 then 0 else 1 end) as col from table;
我需要像多列
select (case when 1=1 then 0 as col, 1 as col1 else 2 as col1 , 3 as col2 end) from table;
select (case when 1=1 then 0,1 else 2, 3 end)col , col1 from table;
在上述条件下合并功能是否被充分使用?谢谢。
答案 0 :(得分:0)
在Db2中使用单个CASE语句是不可能的。
但是您可以使用类似下面的内容。
select
coalesce(t1.c1, t2.c1, t3.c1) c1
, coalesce(t1.c2, t2.c2, t3.c2) c2
from
(
select tabschema, tabname, rownumber() over (partition by tabschema) rn_
from syscat.tables
) b
left join table(values ('_SYSIBM_', b.tabname)) t1 (c1, c2) on b.tabschema='SYSIBM'
left join table(values ('_SYSCAT_', b.tabname)) t2 (c1, c2) on b.tabschema='SYSCAT'
cross join table(values (b.tabschema, b.tabname)) t3 (c1, c2)
where b.rn_=1;
sub-select
上的syscat.tables
被构造为从每个模式仅返回一个表,只是为了展示这个主意(您的基本表必须在其中,而不是在其中)。这是您在每个on
的{{1}}子句中看到的“情况”。此“ Case表达式”的“返回值”位于join
子句中。
答案 1 :(得分:0)
CASE语句可以重写为UNION。从逻辑上讲,它们是同一件事。 所以,你可以这样做
select 0 as col, 1 as col1 from table where 1=1
UNION ALL
select 2 as col, 3 as col1 from table where NOT 1=1 OR 1=1 IS NULL