17,377
社区成员
发帖
与我相关
我的任务
分享
MERGE INTO TAB1
USING (SELECT TMP.SID, SUM(TAB1.INQTY) - SUM(TAB1.OUTQTY) ENDQTY
FROM TAB1, TAB1 TMP
WHERE T1.SID <= TMP.SID
GROUP BY TMP.SID) B
ON TAB1.SID = B.SID
WHEN MATCHED THEN
UPDATE SET TAB1.ENDQTY = B.ENDQTY;
MERGE INTO TAB1 t1
USING (SELECT TMP.SID, SUM(TAB1.INQTY) - SUM(TAB1.OUTQTY) ENDQTY
FROM TAB1, TAB1 TMP
WHERE TAB1.SID <= TMP.SID
GROUP BY TMP.SID) B
ON (t1.SID = B.SID)
WHEN MATCHED THEN
UPDATE SET t1.ENDQTY = B.ENDQTY;
--又忘记加括号了,日。
update tab1 t1
set EndQty=(select sum(InQty-OutQty) from tab1 t2 where t2.SID<=t1.SID)
MERGE INTO TAB1 t1
USING (SELECT TMP.SID, SUM(TAB1.INQTY) - SUM(TAB1.OUTQTY) ENDQTY
FROM TAB1, TAB1 TMP
WHERE TAB1.SID <= TMP.SID
GROUP BY TMP.SID) B
ON t1.SID = B.SID
WHEN MATCHED THEN
UPDATE SET t1.ENDQTY = B.ENDQTY;
create table TAB1
(
SID VARCHAR2(50),
Inqty NUMBER(18,6),
OutQty NUMBER(18,6),
EndQty NUMBER(18,6)
);
insert into tab1 (SID, Inqty, OutQty)
values ('1', 1, 1);
insert into tab1 (SID, Inqty, OutQty)
values ('2', 2, 1);
insert into tab1 (SID, Inqty, OutQty)
values ('3', 3, 1);
--这里写更新EndQty值
select SID, Inqty, OutQty, EndQty from tab1
order by SID;
--结果为(上次余额+inQty -outQty =EndQty):
SID INQTY OutQty EndQty
1 1 1 0
2 2 1 1
3 3 1 3
with T as (
select '001' sid, 2.5 inqty,1.5 outqty from dual union
select '002',3.5,2.5 from dual union
select '003', 4.5,1.5 from dual)
-- 上面的是测试模拟数据,不需要引用
SELECT SID,OUTQTY,OUTQTY,SUM(INQTY - OUTQTY) OVER(ORDER BY SID) ENDQTY FROM T;
update t2
set EndQty=t1.TotalQty
from
(Select *,(select SUM(InQty-OutQty) from tab1 where SID<=a.SID) as TotalQty from tab1 as a)t1
inner join tab1 as t2 on t1.SID=t2.SID