在 SELECT 上应用按位 AND 逻辑的最佳做法



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

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

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  

有没有更好的方法可以做到这一点?我必须强制转换变量,因为 MIN 只采用数字类型。

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

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

最后,完成后真的需要重铸为 BIT 吗? 根据查询结果的使用方式,可能不需要这样做。

使用

案例语句怎么样?

select record_id,
min(case when some_condition=0 then 0 else 1 end) as minCond
from sometable
group by 
record_id

最新更新