在SELECT上应用按位AND逻辑的最佳实践

时间:2012-11-21 21:11:09

标签: sql sql-server-2008

我试图找到应用以下逻辑的最佳方法。我们的业务逻辑要求我在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只接受数字类型。

2 个答案:

答案 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吗?根据查询结果的使用方式,可能不需要。