我有一些行我必须聚合,输入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)
任何人都可以帮助我吗? 谢谢
答案 0 :(得分: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;
感谢@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
列
答案 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