使用从同一个表的多行检索的数据更新多个列

时间:2013-09-22 12:25:35

标签: sql database db2

以下数据:

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'的相同数据。如何在这样的多个记录的单个更新查询中实现这一点。

请指导。

1 个答案:

答案 0 :(得分:1)

基本思想是使用row_number窗口函数为这两组分配1,2,3等。然后,您可以将这些值连接起来,以确定第1组中的哪个值应该应用于第2组中的哪个值。

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

如果First中没有足够的值,那么第二个的结束值将被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