通过具有重复 ID 的 SELF JOIN 进行更新

UPDATING via SELF JOIN with duplicate ID's

以下是示例架构:

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)

它提供了以下 SELECT 结果:

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|

我想通过 SELF JOIN 更新,这样我就可以按如下方式为每个 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|

我正在尝试通过 SELF JOIN UPDATE 完成创建重复结果,如下所示;这不会产生我想要的结果:

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)

我是否采用了错误的方法来获得我想要的结果?这是合并可以做得更快的事情吗?

尝试:

Max(column_Name)OVER Clause

您将获得所需的输出。

select 
 Id,
 Max(a) over(partition by Id),
 Max(b) over(partition by Id),
 Max(c) over(partition by Id)
from #temp1