Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 通过具有重复ID的自连接进行更新_Sql Server_Sql Update_Self Join - Fatal编程技术网

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

我知道还有更简单的方法!杰出的