查询对以前的值求和

Query to sum the previous values

我有如图中的 table 结构

我需要将值添加到先前值的总和中(显示在所需的结果中) 我尝试了以下查询

SELECT empid,
sum(tot_hours) OVER (PARTITION BY empid ORDER BY empid ) AS tot_hours
        FROM empDet
       ORDER BY empid

但我得到以下结果集

但是我需要第一张图的结果。

谁能帮我做这个?

sum(tot_hours) OVER (PARTITION BY empid ORDER BY empid ) AS tot_hours

您的ORDER BY不正确。如果您想要TOT_HOURS上的运行 SUM,那么您应该按tot_hours.

排序

例如,下面的查询将计算每个部门员工的运行工资总和:

SQL> SELECT deptno,
  2    sal,
  3    SUM(sal) OVER (PARTITION BY deptno ORDER BY sal ) AS tot_sal
  4  FROM emp
  5  ORDER BY deptno;

    DEPTNO        SAL    TOT_SAL
---------- ---------- ----------
        10       1300       1300
        10       2450       3750
        10       5000       8750
        20        800        800
        20       1100       1900
        20       2975       4875
        20       3000      10875
        20       3000      10875
        30        950        950
        30       1250       3450
        30       1250       3450
        30       1500       4950
        30       1600       6550
        30       2850       9400

14 rows selected.

SQL>

更新 对于重复值,运行 总数将是重复的。要使其唯一,请使用 UNBOUNDED PRECEDING 子句。例如,

SQL> SELECT empno, deptno,
  2    sal,
  3    SUM(sal) OVER (PARTITION BY deptno ORDER BY sal ROWS UNBOUNDED PRECEDING) AS tot_sal
  4  FROM emp
  5  ORDER BY deptno;

     EMPNO     DEPTNO        SAL    TOT_SAL
---------- ---------- ---------- ----------
      7934         10       1300       1300
                   10       1300       2600
      7782         10       2450       5050
      7839         10       5000      10050
      7369         20        800        800
      7876         20       1100       1900
      7566         20       2975       4875
      7788         20       3000       7875
      7902         20       3000      10875
      7900         30        950        950
      7521         30       1250       2200
      7654         30       1250       3450
      7844         30       1500       4950
      7499         30       1600       6550
      7698         30       2850       9400

15 rows selected.

SQL>