如何获取列值等于“True”的列名的逗号分隔列表

时间:2018-01-24 02:30:22

标签: sql sql-server database

我想编写一个SQL Server查询,它可以选择所有逗号分隔列列表,其中该行的列值为“True”。 这就是我的表格,这里c1,c2,c3和c4是列

ID c1  c2  c3  c4
1  Yes No  Yes No    
2  Yes Yes No  No    
3  No  Yes No  No    
4  Yes No  No  No    
5  Yes No  Yes No    
6  Yes No  No  No    
7  No  No  Yes No

我的预期结果是:

1  c1, c3    
2  c1, c2    
3  c2    
4  c1    
5  c1, c3    
6  c1    
7  c3

我尝试了很多但没有运气。

1 个答案:

答案 0 :(得分:5)

您可以使用条件连接来执行此操作:

select id,
       stuff( (case when c1 = 'Yes' then ', c1' else '' end) +
              (case when c2 = 'Yes' then ', c2' else '' end) +
              (case when c3 = 'Yes' then ', c3' else '' end) +
              (case when c4 = 'Yes' then ', c4' else '' end),
              1, 2, ''
             )
from t;