我有一个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 Server 2012中工作.感谢任何形式的帮助.如果需要进一步说明,请告诉我.
观察"按位OR"具有与聚合函数相同的函数MAX
(假设所有输入都是0或1,如果任何输入为1,则结果为1,否则为0)并且考虑到我们无法直接聚合的事实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