我有一个SQL表,其结构类似于以下内容:

  Name     Value
(varchar)  (bit)
__________________
 Val1       1
 Val2       1
 Val3       0
 Val4       0
 Val1       0
 Val2       0
 Val3       0
 Val4       1


因此,基本上,我有两个相同行的实例,但是具有不同的位值。我想从该表中检索不同的行,将位值进行或运算。因此,对于给定的示例,结果将如下所示:

Name    Value




Val1      1    (1 | 0)
Val2      1    (1 | 0)
Val3      0    (0 | 0)
Val4      1    (0 | 1)


能做到吗?
我正在使用Microsoft SQL Server2012。感谢任何帮助。如果需要进一步说明,请告诉我。

最佳答案

观察到“按位或”具有与聚合函数MAX相同的功能(假设所有输入均为0或1,如果任何输入为1,则结果为1,否则为0),并考虑到我们可以t直接聚合bit,这似乎起作用:

declare @t table (Name varchar(17) not null,Value bit not null)
insert into @t(Name,Value) values
('Val1',1),
('Val2',1),
('Val3',0),
('Val4',0),
('Val1',0),
('Val2',0),
('Val3',0),
('Val4',1)

select Name,CONVERT(bit,MAX(CONVERT(int,Value))) as Value
from @t group by Name

08-05 05:00
查看更多