Sql server 通过具有重复ID的自连接进行更新
以下是一个示例模式:Sql server 通过具有重复ID的自连接进行更新,sql-server,sql-update,self-join,Sql Server,Sql Update,Self Join,以下是一个示例模式: CREATE TABLE #temp1( id varchar(10), a int, b int, c int) INSERT INTO #temp1 (id, a, b, c) VALUES ('one',1, 0, 0) INSERT INTO #temp1 (id, a, b, c) VALUES ('one',0, 1, 0) INSERT INTO #temp1 (id, a, b, c) VALUES ('two',0, 1, 0) INSERT
CREATE TABLE #temp1(
id varchar(10),
a int,
b int,
c int)
INSERT INTO #temp1 (id, a, b, c)
VALUES ('one',1, 0, 0)
INSERT INTO #temp1 (id, a, b, c)
VALUES ('one',0, 1, 0)
INSERT INTO #temp1 (id, a, b, c)
VALUES ('two',0, 1, 0)
INSERT INTO #temp1 (id, a, b, c)
VALUES ('two',0, 0, 1)
INSERT INTO #temp1 (id, a, b, c)
VALUES ('three',0, 0, 1)
INSERT INTO #temp1 (id, a, b, c)
VALUES ('three',1, 0, 0)
提供以下选择结果:
id |a|b|c|
-----------
one |1|0|0|
------------
one |0|1|0|
------------
two |0|1|0|
------------
two |0|0|1|
------------
three|0|0|1|
------------
three|1|0|0|
我想通过自联接进行更新,以便可以按如下方式为每个ID创建重复行:
id |a|b|c|
-----------
one |1|1|0|
------------
one |1|1|0|
------------
two |0|1|1|
------------
two |0|1|1|
------------
three|1|0|1|
------------
three|1|0|1|
我正在尝试从自连接更新中创建重复结果,如下所示;这不会产生我想要的结果:
UPDATE o
SET
o.a = t.a,
o.b = t.b,
o.c = t.c
FROM #temp1 o
INNER JOIN #temp1 t
ON o.id = t.id
WHERE (o.a = 0 AND t.a = 1)
OR (o.b = 0 AND t.b = 1)
OR (o.c = 0 AND t.c = 1)
我是否采取了错误的方法来获得我想要的结果?这是合并可以更快完成的吗?试试:
带有
您将获得所需的输出
select
Id,
Max(a) over(partition by Id),
Max(b) over(partition by Id),
Max(c) over(partition by Id)
from #temp1
我知道还有更简单的方法!杰出的