我试图找到应用以下逻辑的最佳方法。我们的业务逻辑要求我在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
有更好的方法吗?我必须将var作为MIN进行CAST只接受数字类型。
答案 0 :(得分:1)
如何使用案例陈述?
select record_id,
min(case when some_condition=0 then 0 else 1 end) as minCond
from sometable
group by
record_id
答案 1 :(得分:1)
首先,您可以省略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吗?根据查询结果的使用方式,可能不需要。