在单个CASE DB2上返回多列

时间:2019-06-08 07:07:05

标签: db2

是否可以在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;

在上述条件下合并功能是否被充分使用?谢谢。

2 个答案:

答案 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