DB2数据库删除记录后重新更新文件序号的技术咨询
DB2 删除记录后重新编排行号的正确SQL
原SQL存在的问题
ORDER BY G TLINE属于拼写错误,应为ORDER BY gtline- JOIN条件
b.gtline <> a.gtline逻辑错误,会导致记录匹配混乱,无法完成正确的序号更新 - 若需按
gttran分组编排序号,原SQL缺少PARTITION BY gttran,会导致全局生成序号,打乱不同分组的编号逻辑
修正后的SQL(按gttran分组重新编号)
如果需要在每个gttran分组内,按原gtline的顺序重新生成连续序号,使用以下语句:
WITH RowNumbers AS ( SELECT ROW_NUMBER() OVER (PARTITION BY gttran ORDER BY gtline) AS row_num, gtline, gttran FROM GPOTRSP ) UPDATE GPOTRSP b SET b.gtline = a.row_num FROM RowNumbers a WHERE b.gttran = a.gttran AND b.gtline = a.gtline;
关键说明
PARTITION BY gttran:保证每个gttran分组独立生成序号,不同分组的编号互不干扰ORDER BY gtline:按照原序号的顺序重新编排,确保新序号连续且符合原有排序逻辑(若需按其他字段排序,替换为对应字段即可)- 精准关联条件:通过
b.gttran = a.gttran AND b.gtline = a.gtline匹配每条记录,将重新生成的row_num赋值给gtline
全局重新编号(无分组)
如果不需要按gttran分组,直接对全表记录重新编号,去掉PARTITION BY gttran即可:
WITH RowNumbers AS ( SELECT ROW_NUMBER() OVER (ORDER BY gtline) AS row_num, gtline, gttran FROM GPOTRSP ) UPDATE GPOTRSP b SET b.gtline = a.row_num FROM RowNumbers a WHERE b.gttran = a.gttran AND b.gtline = a.gtline;
内容的提问来源于stack exchange,提问作者Swasti Das
相关产品推荐
相关产品推荐

