sameSQLtable两行之间如何按位或运算?
How to perform bitwise OR operation between two rows in same SQL table?
我有一个 SQL table,其结构类似于以下内容:
Name Value
(varchar) (bit)
__________________
Val1 1
Val2 1
Val3 0
Val4 0
Val1 0
Val2 0
Val3 0
Val4 1
所以基本上,我有同一行的两个实例,但具有不同的位值。我想从此 table 中检索不同的行,并将位值进行“或”运算。因此对于给定的示例,结果将如下所示:
Name Value
Val1 1 (1 | 0)
Val2 1 (1 | 0)
Val3 0 (0 | 0)
Val4 1 (0 | 1)
这能实现吗?
我在 Microsoft SQL Server 2012 工作。感谢任何帮助。如果需要进一步说明,请告诉我。
观察"bitwise 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
你可以试试这个,希望值是数值字段,值为 0 和 1。
SELECT Name, MAX(Value)
FROM [table]
GROUP BY Name
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
我有一个 SQL table,其结构类似于以下内容:
Name Value
(varchar) (bit)
__________________
Val1 1
Val2 1
Val3 0
Val4 0
Val1 0
Val2 0
Val3 0
Val4 1
所以基本上,我有同一行的两个实例,但具有不同的位值。我想从此 table 中检索不同的行,并将位值进行“或”运算。因此对于给定的示例,结果将如下所示:
Name Value
Val1 1 (1 | 0)
Val2 1 (1 | 0)
Val3 0 (0 | 0)
Val4 1 (0 | 1)
这能实现吗? 我在 Microsoft SQL Server 2012 工作。感谢任何帮助。如果需要进一步说明,请告诉我。
观察"bitwise 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
你可以试试这个,希望值是数值字段,值为 0 和 1。
SELECT Name, MAX(Value)
FROM [table]
GROUP BY Name
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