使用带有条件

时间:2016-05-09 10:38:16

标签: sql sql-server

例如,我有这个表有不同的列名和它下面的布尔值,

case1 case2 case3 case4
1     0     1     0

我想要检索的内容,只有1个值的列名。所以,我想要的查询结果应该只是case1,case3

所需输出:case1,case3

只能从sql查询中获取一行

有什么办法吗?

2 个答案:

答案 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