我成功使用以下内容:
hworld
通过在同一个表上使用操作,基本上是同一个表上的UPDATE。子查询返回多行,这很重要。
这是我的表格和结果:
现在我想做同样的事情,但避免MERGE INTO,我尝试了以下但没有成功:
MERGE INTO table_name tab1
USING (SELECT ID,(NVL(col1,0) - NVL(LAG(NVL(col1,0),1) OVER
(PARTITION BY type order by ID),0)) VAL FROM table_name) bb
ON (tab1.ID = bb.ID)
WHEN matched THEN
UPDATE SET tab1.col2 = bb.VAL;
最新的SQL代码给了我这个:
UPDATE
(SELECT aa.COL2 as OLD, (NVL(aa.COL1,0) - NVL(LAG(NVL(aa.COL1,0),1)
OVER (PARTITION BY aa.TYPE order by aa.ID),0)) AS NEW
FROM table_name aa
INNER JOIN table_name bb
ON aa.ID = bb.ID
) t
SET t.OLD = t.NEW;
有什么想法吗?
答案 0 :(得分:2)
怎么样:
update table_name t
set col2 = col1 - coalesce( (select max(col1) keep (dense_rank first order by t2.id desc)
from table_name t2
where t2.type = t.type and t2.id < t.id
), 0);
这是一种不同的方法,但它不使用merge
。