假设我们有一个带有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,这非常简单。
唯一的问题是这个特别难看,应该用火杀死。 有没有优雅,恰当的方法呢?
答案 0 :(得分: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
答案 1 :(得分:1)
您可以使用变量来存储计算,例如:
Declare @result bit = 1
SELECT @result = @result & isTrue
FROM Table
WHERE ID > 5