SQL Server:CASE语句

3

我有一个名为boolean的表,其中一列包含字符串形式的'true'和/或'false'值。

我遇到了一个问题,无法创建case语句来显示该列中是否仅存在'true'、'false'或两者都有的情况。

示例1:

'true'  
'true'  

结果:'true'

示例2:

'false'   
'false'  
'false' 

结果: 'false'

示例3:

'true'  
'false'  
'true' 

结果:'both'

编辑:

case语句应该像这样:

case 
   when  "column content are only true values"  then 'true' 
   when  "column content are only false values" then 'false'
   else 'both' 
end

1
听起来像是一项作业任务。 - Rich S
我不理解所描述的问题。你能分享一下表的DDL,或者更好的方式是提供一个SQLFiddle吗? - Mureinik
2
取最小值和最大值并进行比较,如果它们不同,则都取,否则取该值。 - James Z
1
另外,请记住 SQL Server 有一个位数据类型,用于布尔值。 - Zohar Peled
1
哦天啊。有老师告诉你把布尔值存储为字符串吗? - SQL Police
显示剩余2条评论
3个回答

8

您可以汇总列的maxmin,然后评估结果-如果它们相同,则列中只有一个值。如果不是,则必须同时存在。请注意,由于这些是字符串表示,因此按字典顺序排序:

SELECT CASE WHEN MAX(col) = MIN(col) THEN MAX(col) ELSE 'both' END
FROM   my_table

4
SELECT CASE WHEN MIN(Col) <> MAX(Col) THEN 
          'Both'
       ELSE
          MIN(Col)
       END
FROM YourTable

2
select case when count(distinct bool_column) = 2 then 'both'
            when sum(case when bool_column = 'false' then 1 end) > 0 then 'false'
            else 'true'
       end as result
from your_table

1
可以运行,但是比较复杂。我不投票,但你可能会找到更优雅的解决方案。 - SQL Police

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接