我的结果集如下:
Name number reg_type1 reg_type2 reg_type3 reg_type4 reg_type5 reg_type6 reg_type7
aaa 123 Y N Y N Y N N
bbb 234 N N Y N Y N N
ccc 456 Y N Y Y N Y Y
我希望结果集如下:
Name number level1 level2 level3 level4 level5
aaa 123 reg_type1 reg_type3 reg_type5 NULL NULL
bbb 234 reg_type3 reg_type5 NULL NULL NULL
ccc 456 reg_type1 reg_type3 reg_type4 reg_type6 reg_type7
任何人都可以帮助我!!
谢谢!
答案 0 :(得分:3)
如果您愿意将它们放在一列而不是单独的列中,那么代码非常简单:
select name, number,
((case when reg_type1 = 'Y' then 'reg_type1 ' else '' end) ||
(case when reg_type2 = 'Y' then 'reg_type2 ' else '' end) ||
(case when reg_type3 = 'Y' then 'reg_type3 ' else '' end) ||
(case when reg_type4 = 'Y' then 'reg_type4 ' else '' end) ||
(case when reg_type5 = 'Y' then 'reg_type5 ' else '' end) ||
(case when reg_type6 = 'Y' then 'reg_type6 ' else '' end) ||
(case when reg_type7 = 'Y' then 'reg_type7 ' else '' end)
)
from t;
如果你真的想要它们在不同的列中,你可以这样做:
select name, number,
substr(regtypes, 1, 10) as level1,
substr(regtypes, 11, 10) as level2,
substr(regtypes, 21, 10) as level3,
substr(regtypes, 31, 10) as level4,
substr(regtypes, 41, 10) as level5,
substr(regtypes, 51, 10) as level6,
substr(regtypes, 61, 10) as level7
from (select name, number,
((case when reg_type1 = 'Y' then 'reg_type1 ' else '' end) ||
(case when reg_type2 = 'Y' then 'reg_type2 ' else '' end) ||
(case when reg_type3 = 'Y' then 'reg_type3 ' else '' end) ||
(case when reg_type4 = 'Y' then 'reg_type4 ' else '' end) ||
(case when reg_type5 = 'Y' then 'reg_type5 ' else '' end) ||
(case when reg_type6 = 'Y' then 'reg_type6 ' else '' end) ||
(case when reg_type7 = 'Y' then 'reg_type7 ' else '' end)
) as regtypes
from t
) t
此版本假设所有值的长度均为9,并且它们之间有空格。