以下数据:
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'的相同数据。如何在这样的多个记录的单个更新查询中实现这一点。
请指导。
答案 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 强>