0

我正在尝试找到应用以下逻辑的最佳方法。我们的业务逻辑要求我将一堆行插入到 var 表中,然后选择所有不同的记录,但只有当它匹配具有相同 id 的所有记录时才将条件设置为肯定 [所以基本上按位与]

希望我的例子能更好地解释这一点。

DECLARE @sometable TABLE (
record_id INT NOT NULL,
some_condition BIT NOT NULL)

该表中的记录将匹配

record_id some_condition
1         1
1         0
2         0
3         0

在上述情况下,所需的输出应该是

record_id some_condition
1         0
2         0
3         0

直到现在我一直这样做是这样的

SELECT DISTINCT record_id  CAST(MIN(CAST(some_condition INT)) AS some_condition
FROM @sometable
GROUP BY record_id  

有一个更好的方法吗?我不得不 CAST var 因为 MIN 只接受数字类型。

4

2 回答 2

1

使用case语句怎么样?

select record_id,
min(case when some_condition=0 then 0 else 1 end) as minCond
from sometable
group by 
record_id
于 2012-11-21T21:19:41.650 回答
1

首先,您可以省略DISTINCT,因为GROUP BY已经使它们与众不同。CAST此外,如果只添加 0 ,则可以避免最内层:

SELECT record_id,  CAST(MIN(some_condition+0) as BIT) AS some_condition
FROM @sometable
GROUP BY record_id

最后,你真的需要在完成后重新转换为 BIT 吗?根据查询结果的使用方式,可能不需要。

于 2012-11-21T21:20:27.397 回答