sql,使用CASE时过滤掉空列

时间:2016-02-18 21:43:50

标签: sql postgresql null case

我将Booleans转换为文本:

select 
    CASE WHEN admin IS true THEN 'Admin' END,
    CASE WHEN co IS true THEN 'CO' END,
    CASE WHEN corp IS true THEN 'CORP' END, 
    CASE WHEN grind IS true THEN 'grind' END, 
    CASE WHEN vendor IS true THEN 'Vendor' END, 
    CASE WHEN gpm IS true THEN 'GPM' END
from user_profiles where user_name = 'don.smith@happy.com'; 

不幸的是,这会返回空值。如何返回仅返回包含文本的字段?

2 个答案:

答案 0 :(得分:0)

您无法进行查询以返回不同行的dinamic列数。因此,如果您想删除2_3,您可以做的最好是添加NULL clausule以返回空字符串ELSE,否则''的默认返回值为{{1} }}

您还应考虑为每个字段名称添加别名

ELSE

答案 1 :(得分:0)

如果要将此作为单个分隔列返回,则一种方法为concat_ws()

select concat_ws(',',
                 CASE WHEN admin IS true THEN 'Admin' END,
                 CASE WHEN co IS true THEN 'CO' END,
                 CASE WHEN corp IS true THEN 'CORP' END, 
                 CASE WHEN grind IS true THEN 'grind' END, 
                 CASE WHEN vendor IS true THEN 'Vendor' END, 
                 CASE WHEN gpm IS true THEN 'GPM' END
                )
from user_profiles
where user_name = 'don.smith@happy.com'; 

这会将值作为单个列返回:单个查询不能包含可变数量的列,因此单个列似乎是最佳选项。