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;