例如,我有这个表有不同的列名和它下面的布尔值,
case1 case2 case3 case4
1 0 1 0
我想要检索的内容,只有1个值的列名。所以,我想要的查询结果应该只是case1,case3
所需输出:case1,case3
只能从sql查询中获取一行
有什么办法吗?
答案 0 :(得分:3)
如果我理解正确,您可以使用大case
声明:
select stuff(( (case when case1 = 1 then ',case1' else '' end) +
(case when case2 = 1 then ',case2' else '' end) +
(case when case3 = 1 then ',case3' else '' end) +
(case when case4 = 1 then ',case4' else '' end)
), 1, 1, '') as columns
答案 1 :(得分:0)
如果您有多行。
<强>查询强>
select stuff((
(case when count(*) = sum(cast(case1 as int)) then ',case1' else '' end) +
(case when count(*) = sum(cast(case2 as int)) then ',case2' else '' end) +
(case when count(*) = sum(cast(case3 as int)) then ',case3' else '' end) +
(case when count(*) = sum(cast(case4 as int)) then ',case4' else '' end)), 1, 1, '')
as no_zero_columns
from your_table_name;
SQL Fiddle Demo