表格式:
+---------+---------+-----------------+
| column1 | column2 | column3| column4|
+---------+---------+-----------------+
| value1 | true | true | false |
| value2 | true | false | true |
| value4 | false | false | false |
+---------+---------+-----------------+
第1列到第4列的数据类型为布尔值。
我想检查所有这些布尔列值是否为false或至少有一个列值为true。
使用SQL Server查询有没有更好的方法? 预期产出:
+---------+---------+-----------------+
| column1 | column2 | column3| column4|
+---------+---------+-----------------+
| value1 | true | true | false | = true
| value2 | true | false | true | = true
| value4 | false | false | false | = false
+---------+---------+-----------------+
答案 0 :(得分:2)
如果bit
数据类型,请使用bitwise运算符。
DECLARE @foo table (column1 bit, column2 bit, column3 bit, column4 bit)
INSERT @foo VALUES (1, 1, 0, 1), (0, 1, 0, 0), (0, 0, 0, 0)
SELECT
CASE
WHEN column1 | column2 | column3 | column4 = 0 THEN 'All false'
ELSE 'Some true'
END
FROM @foo;
非常简单,没有涉及CAST
答案 1 :(得分:0)
在SQL Server中,没有布尔类型,但是我使用的是bit
数据类型,它基本上是0
和1
(显然)。因此,您的表将成为0和0的表,0 - false,1 - true。因此,要检查四个中是否至少有一列是真的,只需添加所有值并检查它是否大于零(如果全部为假,则总和将等于零),如:
case when cast(column1 as int) +
cast(column2 as int) +
cast(column3 as int) +
cast(column4 as int) > 0 then 'at least one true' else 'all false' end
答案 2 :(得分:0)
SQL Server没有Boolean
类型,它有BIT
类型来表示布尔数据
select a.column1,
case when sum(a.value) >= 1
then 'one or more is true' else 'all is false' end [CheckBoolVal]
from table t cross apply (
values (column1, col2), (column1, col3), (column1, col4) )a(column1, value)
group by a.column1
结果:
column1 CheckBoolVal
value1 one or more is true
value2 one or more is true
value4 all is false