17,377
社区成员
发帖
与我相关
我的任务
分享
SELECT nd, yf, dwysbm, zjxzbm, xmbm, jjflbm, ljje
FROM (SELECT t.*, SUM(dyfse) OVER(PARTITION BY zjxzbm,xmbm) ljje
FROM t_zj t
WHERE nd = '2017' AND dwysbm = '318010' AND yf <= 2) WHERE yf = 2
SQL>
SQL> create table test(
2 divid varchar(10),
3 m varchar(10),
4 AcctCode varchar(10),
5 econ varchar(10),
6 ApprMoney int
7 );
Table created
SQL> begin
2 insert into test values(318001,1, '2190101','30101', 500);
3 insert into test values(318001,1, '2190101','30102', 500);
4 insert into test values(318001,1, '2190101','30103', 500);
5 insert into test values(318001,2, '2190101','30101', 400);
6 insert into test values(318001,2, '2190101','30102', 500);
7 insert into test values(318001,2, '2190101','30103', 600);
8 end;
9 /
PL/SQL procedure successfully completed
SQL> -- 方法 1
SQL> with m as (
2 select divid, m, AcctCode, econ,
3 sum(ApprMoney) over(partition by divid, AcctCode, econ order by m) xx
4 from test
5 )
6 select * from m where divid = '318001' and m = '2';
DIVID M ACCTCODE ECON XX
---------- ---------- ---------- ---------- ----------
318001 2 2190101 30101 900
318001 2 2190101 30102 1000
318001 2 2190101 30103 1100
SQL> -- 方法 2
SQL> select divid, m, AcctCode, econ,
2 (select sum(ApprMoney) from test
3 where divid = t.divid and m <= t.m and AcctCode = t.AcctCode and econ = t.econ
4 ) x
5 from test t
6 where divid = '318001' and m = '2';
DIVID M ACCTCODE ECON X
---------- ---------- ---------- ---------- ----------
318001 2 2190101 30101 900
318001 2 2190101 30102 1000
318001 2 2190101 30103 1100
SQL> drop table test purge;
Table dropped
SQL>