通过分组更新列

时间:2019-08-15 14:52:54

标签: sql group-by sql-update

我有两列的表

key     Account
----    -------
AAA01   BGHJ
AAA01   JHGF
AAA01   UHGF
AAA02   IYTG
AAA03   JHKJH
AAA03   REYT

我想用首先出现的Account值更新Key列的值。因此,我的输出应为:

key    Account
----   -------
BGHJ    BGHJ
BGHJ    JHGF
BGHJ    UHGF
IYTG    IYTG
JHKJH   JHKJH
JHKJH   REYT

我一直在尝试按“键”对帐户分区使用ROW_NUMBER,并尝试使用具有ROW_NUMBER = 1的帐户值更新“键”值。但这不起作用。

更新的测试数据:

key     Account
----    -------
1G00N   1N000C
1G00N   1N0008
1G00N   1N253M
1G00N   1N253N
1G00C   1N253N
1G00C   1N000B

我想用首先出现的Account值更新Key列的值。因此,我的输出应为:

key     Account
----    -------
1N000C  1N000C
1N000C  1N0008
1N000C  1N253M
1N000C  1N253N
1N253N  1N253N
1N253N  1N000B

2 个答案:

答案 0 :(得分:1)

这是一个将生成此输出的选择:

SELECT
    MIN(Account) OVER (PARTITION BY "key") AS "key",
    Account
FROM yourTable;

enter image description here

Demo

适用于大多数数据库的常规更新查询可能是:

UPDATE yourTable t1
SET "key" = (SELECT MIN(t2.Account) FROM yourTable t2 WHERE t2."key" = t1."key");

答案 1 :(得分:0)

类似的事情可能起作用:

UPDATE TABLE A SET A.KEY = (SELECT TOP 1 B.ACCOUNT FROM TABLE B WHERE B.KEY = A.KEY)

相关问题