我正在尝试找到应用以下逻辑的最佳方法。我们的业务逻辑要求我在 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