t-SQL聚合逻辑

时间:2013-07-17 13:30:19

标签: sql sql-server group-by aggregate logical-operators

假设我们有一个带有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,这非常简单。

唯一的问题是这个特别难看,应该用火杀死。 有没有优雅,恰当的方法呢?

2 个答案:

答案 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
相关问题