【发布时间】:2016-02-18 09:32:35
【问题描述】:
对于每个不同的 ref_no 值,我想使用从 1 开始的递增值的运行序列来更新 seq_no 列。
REF_NO SEQ_NO (initial) SEQ_NO (expected)
------- ------- -------
111. - 1.
111. - 2.
111. - 3.
222. - 1.
222. - 2.
333. - 1.
100. - 1.
100. - 2.
100. - 3.
100. - 4.
0. - 1.
333. - 2.
100. - 5.
200. - 1.
我只能通过重复多个语句来做到这一点:
declare x1 cursor for select * from xyz where seq_no is null for update of seq_no
open x1
fetch from x1
update xyz a set a.seq_no = (select nvl(max(b.seq_no)+1, 1) from xyz b where b.ref_no = a.ref_no) where current of x1
-- REPEAT ABOVE TWO STATEMENTS UNTIL FETCH RETURNS NO ROW --
close x1
select * from xyz
是否可以完全使用单个 UPDATE 语句来完成此操作,只运行一次以更新整个表?数据库是 IBM DB2。
注意:不同 ref_no 的行的实际顺序是任意的,并不重要。
【问题讨论】:
标签: sql sql-update db2