答案 0 :(得分:1)
不确定这是否是你想要的:
update table1 t1
set t1.Newlosal=case when t1.grade=1 then (t1.Newhisal+1) else (select t2.Newhisal+1 from table1 t2 where t2.grade = (t1.grade-1)) end
WHERE EXISTS (
SELECT 1
FROM table1 t2
WHERE t2.grade=(t1.grade-1))
答案 1 :(得分:0)
这可以使用merge
语句和窗口函数有效地完成:
merge into table1 tg
using
(
select id, -- I assume this is the PK column
lag(newhisal) over (order by grade) + 1 as new_losal
from table1
) nv on (nv.id = tg.id)
when matched then update
set tg.newlosal = nv.new_losal;
在表中的SQL行(或结果)中或者没有排序,所以"之前的概念"如果您定义排序顺序,则行仅才有意义。那是over (order by grade)
在窗口函数中的作用。从屏幕截图中我无法确定应该对哪一列进行排序。
屏幕截图也没有显示表格的主键列。我认为它的名字是ID
。您必须更改它以反映您的真实PK列名称。
我也没有在窗口函数中包含partition by
子句,假设公式应该以相同的方式应用于所有行。如果不是这种情况,则需要更准确地了解样本数据。