Sql server 如何在SQL Server中从多个布尔列中检查至少一个为true或所有列值为false

Sql server 如何在SQL Server中从多个布尔列中检查至少一个为true或所有列值为false,sql-server,sql-server-2016,Sql Server,Sql Server 2016,表格格式: +---------+---------+-----------------+ | column1 | column2 | column3| column4| +---------+---------+-----------------+ | value1 | true | true | false | | value2 | true | false | true | | value4 | false | false | false | +--

表格格式:

+---------+---------+-----------------+
| column1 | column2 | column3| column4| 
+---------+---------+-----------------+
| value1  | true    | true   | false  |
| value2  | true    | false  | true   |
| value4  | false   | false  | false  |
+---------+---------+-----------------+
列1到4的数据类型为Boolean

我想检查所有这些布尔列值是否为false,或者至少有一个列值为true

有没有更好的方法使用SQL Server查询来实现这一点? 预期产出:

+---------+---------+-----------------+
| column1 | column2 | column3| column4| 
+---------+---------+-----------------+
| value1  | true    | true   | false  | = true
| value2  | true    | false  | true   | = true
| value4  | false   | false  | false  | = false
+---------+---------+-----------------+

在SQL Server中,没有布尔类型,但有一个
数据类型,我使用它,它基本上是
0
1
(显然)。因此,您的表将变成由0和1组成的表,0-假,1-真。因此,要检查四列中是否至少有一列为真,只需将所有值相加,并检查其是否大于零(如果所有值均为假,则总和Wold应等于零),如:


SQL Server没有
Boolean
类型,它有
BIT
类型来表示布尔数据

结果:

column1 CheckBoolVal
value1  one or more is true
value2  one or more is true
value4  all is false
如果
数据类型,只需使用运算符

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;

非常简单,不涉及强制转换

SQL Server没有
布尔值
数据类型是否为1位?value1、value2和value4表示位至少有3种可能的非空状态,这些状态不可能发生。要跨行或跨列求和吗?这是人们留下评论的部分,你应该显示你的预期输出rows@PriyankaDesai“跨行”对你意味着什么?根据您发布的内容,您希望得到什么样的输出?投票以不清楚的方式关闭,您将得到一个错误,“添加运算符中的数据类型bit和bit不兼容。”
column1 CheckBoolVal
value1  one or more is true
value2  one or more is true
value4  all is false
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;