如何在同一个SQL表中的两行之间执行按位OR运算?

时间:2016-01-06 10:53:18

标签: sql sql-server bitwise-operators

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

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

所以基本上,我有两个同一行的实例但具有不同的位值。我想从此表中检索不同的行,位值为OR。因此,对于给定的示例,结果将如下所示:

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

这可以实现吗? 我在Microsoft SQL Server 2012中工作。感谢任何形式的帮助。如果需要进一步澄清,请告诉我。

3 个答案:

答案 0 :(得分:9)

观察“按位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

答案 1 :(得分:2)

您可以尝试这一点,希望该值是数值字段,值为0和1。

SELECT Name, MAX(Value)
FROM [table]
GROUP BY Name

答案 2 :(得分:1)

DECLARE @t TABLE (Name VARCHAR(10) 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, MAX(Value % 2)
FROM @t
GROUP BY Name

输出 -

---------- -----------
Val1       1
Val2       1
Val3       0
Val4       1