データベース積算値クエリー


一、oracle
SUM()OVER()が必要です
select empno,deptno,sal,sum(sal)  over(partition by deptno) sumvalue
from emp order by deptno,empno;

結果:
7782	10	1200	7500
7839	10	5000	7500
7934	10	1300	7500
7369	20	1100	11175
7566	20	2975	11175
7788	20	3000	11175
7876	20	1100	11175
7902	20	3000	11175
7499	30	1600	9400
7521	30	1250	9400
7654	30	1250	9400
7698	30	2850	9400
7844	30	1500	9400
7900	30	950	9400

結果として,データはdeptnoで求和されたが,もちろんこのようなデータもサブクエリgroupbyで実現できるが,最後の列のデータは最後から2番目の列に対して累積求和されていない.
select empno,deptno,sal,sum(sal)  over(partition by deptno order by empno) sumvalue
from emp order by deptno,empno;

結果:
7782	10	1200	1200
7839	10	5000	6200
7934	10	1300	7500
7369	20	1100	1100
7566	20	2975	4075
7788	20	3000	7075
7876	20	1100	8175
7902	20	3000	11175
7499	30	1600	1600
7521	30	1250	2850
7654	30	1250	4100
7698	30	2850	6950
7844	30	1500	8450
7900	30	950	9400

このような結果はdeptnoに従ってパケット積算和を行う.
二、sql server
select empno,deptno,sal,sum(sal) over(partition by deptno) sumValue
from emp order by deptno,empno;

この方式はoracleの結果と同じで、ここでは展示していません.
select empno,deptno,sal,sum(sal) over(partition by deptno order by empno) sumValue
from emp order by deptno,empno;

これにorder byを加えるとsql serverでエラーが報告され、葛藤し、累積和はサブクエリでしか実現できません
select empno,deptno,sal,
(select SUM(SAL) FROM emp innerEmp WHERE innerEmp.deptno=emp.deptno AND innerEmp.empno<=emp.empno) sumValue
from emp
order by emp.deptno,emp.empno;

結果:
7782	10	2450.00	2450.00
7839	10	5000.00	7450.00
7934	10	1300.00	8750.00
7369	20	800.00	800.00
7566	20	2975.00	3775.00
7788	20	3000.00	6775.00
7876	20	1100.00	7875.00
7902	20	3000.00	10875.00
7499	30	1600.00	1600.00
7521	30	1250.00	2850.00
7654	30	1250.00	4100.00
7698	30	2850.00	6950.00
7844	30	1500.00	8450.00
7900	30	950.00	9400.00

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
もっといい方法があるかもしれませんが、貴重な意見を歓迎します.