3

我有一些必须汇总的行,放入 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)

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

我已经尝试了这两种解决方案,但没有一个有效:

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

谁能帮我?谢谢

4

3 回答 3

4

如果您在该列中只有 1 和 0,则sum与进行比较:count

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

Sql 小提琴

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

于 2018-04-12T15:28:44.980 回答
2

这是一种方法

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

或者为什么不只是minBitvalue

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

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

于 2018-04-12T15:41:16.840 回答
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

演示

于 2018-04-12T15:39:18.467 回答