SQL SERVER 2008中的累加添加

3

这是我在SQL SERVER数据库表中获得的数据,我正在尝试计算员工的剩余假期。

EmpId EmpName   EvalDate                OpeningEL   EnjoyedEL   BalanceEL
12    CHANDRA   2014-04-01 18:30:00.000  0.95       0.00         0.95
12    CHANDRA   2014-05-01 18:30:00.000  1.30       0.00         1.30
12    CHANDRA   2014-06-01 18:30:00.000  1.20       1.00         1.20
12    CHANDRA   2014-07-01 18:30:00.000  1.25       0.00         1.25
12    CHANDRA   2014-08-01 18:30:00.000  1.25       1.00         1.25

但是我需要以下方式的数据。
EmpId EmpName   EvalDate                OpeningEL   EnjoyedEL   BalanceEL
12    CHANDRA   2014-04-01 18:30:00.000  0.95       0.00         0.95
12    CHANDRA   2014-05-01 18:30:00.000  2.25       0.00         2.25
12    CHANDRA   2014-06-01 18:30:00.000  3.45       1.00         2.45
12    CHANDRA   2014-07-01 18:30:00.000  3.70       0.00         3.70
12    CHANDRA   2014-08-01 18:30:00.000  4.95       1.00         3.95

上期结转余额加上本期初始余额。

那么,如何实现呢?请提出建议。


您的输入数据中没有 EL with 1.00 - ughai
@ughai:我没有理解你的意思... 能否请您进一步说明一下? - manishpant
在您的源数据中,没有EnjoyedEL为1的记录。但是在我们的输出中,有2条记录的EnjoyedEL为1。 - ughai
@ughai:哦...抱歉...现在我已经纠正了它。 - manishpant
1个回答

0

您可以使用 CROSS APPLYGROUP BY 来实现这一点。

CROSS APPLY 中的 OpeningELBalanceEL 将获取员工当前和上一个记录的总和。

SELECT
    EL1.EmpId,
    EL1.EmpName,
    EL1.EvalDate,
    Temp.OpeningEL,
    EL1.EnjoyedEL,
    Temp.BalanceEL
FROM EmployeeLeave EL1
CROSS APPLY
(
    SELECT
    SUM(OpeningEL) as OpeningEL,
    SUM(BalanceEL) - SUM(EnjoyedEL) as BalanceEL
    FROM EmployeeLeave EL2
    WHERE EL2.EmpId  = EL1.EmpId 
    AND EL2.EvalDate <= EL1.EvalDate
)Temp;

"EL2.Prev_OpeningEL" 这一列在两个表中都不存在。 - manishpant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接