0

对于以下数据:

PGM      INC        EXC
First    A          AA
First    B          BB
First    C          CC
First    D          DD

Second   E          EE
Second   F          FF
Second   G          GG
Second   H          HH

我们如何顺序读取 PGM='First' 的列数据并更新为 PGM='Second' 的列

PGM      INC        EXC
Second   E          AA
Second   F          BB
Second   G          CC
Second   H          DD

在这里,我们可以看到 PGM='Second' 为 4 行映射了 PGM='First' 的相同数据。如何在这样多条记录的单个更新查询中实现这一点。

请指导。

4

1 回答 1

1

基本思想是使用 row_number 窗口函数将 1、2、3 等依次分配给两组。然后,您可以加入这些以找出集合 1 中的哪个值应该应用于集合 2 中的哪个值。

这是适用于 Postgres/Oracle/SQL Server 的最低公分母方法。我无权访问 DB2 来尝试它。

如果 First 中没有足够的值,则 second 的结束值将被覆盖为 null

Update
    test
Set
    Exc = (
        Select
            f.Exc
        From (
            Select
                Exc,
                row_number() over (order by inc) as rn
            From
                test
            Where
                Pgm = 'First'
        ) as f
        inner join (
            Select
                Inc,
                row_number() over (order by inc) as rn
            From
                test
            Where
                Pgm = 'Second'
        ) as s
            On f.rn = s.rn
        Where
             test.inc = s.inc
    )
Where
    test.Pgm = 'Second';

Example Fiddle

于 2013-09-22T12:33:11.260 回答