聚合位列模拟 AND 运算符

Aggregate bit column simulating 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)

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

我试过这 2 种解决方案,但没有一个有效:

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

谁能帮帮我? 谢谢

比较 sumcount 如果该列中只有 1 和 0:

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来反映他的关心

另一种方法可以是

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

这是一种方法

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

或者为什么不只是 min 的比特值

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

两种方法都认为 BitValue 列中没有 NULL 值