聚合位列模拟 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)
谁能帮帮我?
谢谢
比较 sum
和 count
如果该列中只有 1 和 0:
select Id, case when sum(BitValue) < count(Id) then 0 else 1 end as BitValue
from mytable group by Id;
感谢@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
这是一种方法
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 值
我有一些行我必须聚合,放入 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)
谁能帮帮我? 谢谢
比较 sum
和 count
如果该列中只有 1 和 0:
select Id, case when sum(BitValue) < count(Id) then 0 else 1 end as BitValue
from mytable group by Id;
感谢@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
这是一种方法
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 值