2016-08-02 98 views
1

我有三个CASE语句:非相互排斥的CASE语句

create view J as 
select *, 
    (CASE WHEN A in ('01', ‘03') then TRUE ELSE FALSE END) as X, 
    (CASE WHEN A = ‘2' then TRUE ELSE FALSE END) as Y, 
    (CASE WHEN A in ('02', '03') then TRUE ELSE FALSE END) as Z 
from 
K; 

我希望能够创建一个包含X的一个领域,Y,Z的值。我尝试了以下内容,但CASE语句创建的方式只强制第一个参数为true。我理解,这是由于这样的事实,与值“03”的观察可以在X或Z同样一个观察值可以在Y或Z的

create view J as 
(select *, 
(CASE 
WHEN X = TRUE then 1 
WHEN Y = TRUE then 2 
WHEN Z = TRUE then 3 
ELSE NULL END) 
as grouped_field 
from select 
    (CASE WHEN A in ('01', ‘03') then TRUE ELSE FALSE END) as X, 
    (CASE WHEN A = ‘2' then TRUE ELSE FALSE END) as Y, 
    (CASE WHEN A in ('02', '03') then TRUE ELSE FALSE END) as Z 

from 
K)); 

回答

0

这是不是你想要做什么?

concat((case when X = TRUE then '1' else '0' end), 
     (case when Y = TRUE then '1' else '0' end), 
     (case when Z = TRUE then '1' else '0' end) 
    ) 

级联运算符的不同的数据库之间,但典型地是||+

0

也许这样的事情

select *, 
    (CASE WHEN A in ('01', '03') then 'X' ELSE '' END) + 
','+ (CASE WHEN A = '2' then 'Y' ELSE '' END) + 
','+ (CASE WHEN A in ('02', '03') then 'Z' ELSE '' END) as Field 
from 
K;