通过具有重复 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
以下是示例架构:
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