聚合位列模拟AND运算符

时间:2018-04-12 15:23:45

标签: sql-server aggregate-functions and-operator

我有一些行我必须聚合,输入AND一个列。我让你看一个例子......我有一组这样的数据:

Id   |  BitValue
----------------
1    |     1 
1    |     1
2    |     0
3    |     1
3    |     0      

我希望得到的结果是:

Id   |  BitValue
----------------
1    |     1 <- = (1 AND 1)
2    |     0
3    |     0 <- = (1 AND 0)

如何聚合列以获得我想要的结果?

我已尝试过theese 2解决方案,但没有人工作:

SUM(CAST(MyBitField AS INT)),
SUM(CASE(MyBitField) WHEN 1 THEN 1 ELSE 0 END)

任何人都可以帮助我吗? 谢谢

3 个答案:

答案 0 :(得分:4)

如果该列中只有1和0,请将sumcount进行比较:

select Id, case when sum(BitValue) < count(Id) then 0 else 1 end as BitValue 
from mytable group by Id;

Sql fiddle

感谢@Larnu的有用评论。我提出another sql fiddle来反映他的担忧。

答案 1 :(得分:2)

这是一种方式

SELECT Id,
       Min(Cast(Bitvalue AS TINYINT)) * Max(Cast(Bitvalue AS TINYINT))
FROM   yourtable
GROUP  BY Id 

或者为什么不只是Bitvalue的min

SELECT Id,
       Min(Cast(Bitvalue AS TINYINT))
FROM   yourtable
GROUP  BY Id 

该方法都认为BitValue

中没有NULL值

答案 2 :(得分:1)

另一种方法可以是

SELECT DISTINCT ID, 
    ISNULL((SELECT TOP 1 BitValue FROM TBL T1 WHERE T1.ID=T.ID AND 
    BitValue=0),1) AS  BitValue 
FROM TBL T

Demo