1

假设我们有一个带有 ID 和位列的表。我们执行一个返回任意行数的查询(对于此示例,ID>5)。我想要做的是对位列的结果进行 AND 聚合操作。我想出了一个解决方法,但它并不漂亮:

SELECT 
CASE WHEN COUNT(ID) = SUM(CAST(isTrue AS INT)) THEN 1 ELSE 0 END AS areTrue
FROM Table
WHERE ID > 5

我在这里所做的,因为没有聚合函数来乘以结果,实际上是将记录总数与位列的整数表示的总和进行比较。如果它们相等,则没有“错误”,因此它可以作为它们之间的 AND 操作。

OR 是从列中获取 MAX,这非常简单。

唯一的问题是,这特别难看,应该用火杀死。有什么优雅、适当的方法可以做到这一点吗?

4

2 回答 2

3

如果你想对位做逻辑,怎么样:

select max(cast(isTrue as int)) as AnyTrue,
       min(cast(isTrue as int)) as AllTrue,
       max(1 - cast(isTrue as int)) as AnyFalse,
       min(1 - cast(isTrue as int)) as AllFalse
于 2013-07-17T13:34:49.383 回答
1

您可以通过使用变量来存储计算来实现这一点,例如:

Declare @result bit = 1

SELECT @result = @result & isTrue 
FROM Table
WHERE ID > 5
于 2013-07-17T14:06:07.780 回答