2015-05-29 60 views
3

这就是我在我的SQL SERVER数据库表中所得到的,我正在尝试计算员工的余额。 我的实际数据是:在SQL SERVER 2008中累积添加

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 

上一页BalanceELs添加旁边OpeningELs数据。

那么,如何实现这一点....请提出建议。

+0

没有'EL与输入数据1.00' – ughai

+0

@ughai:我没有得到你......你能PLZ阐述更多.. – user3657122

+0

在您的源数据,没有与EnjoyedEL没有记录为1.然而,在我们的输出中,有2条记录的EnjoyedEL为1. – ughai

回答

0

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

OpeningELBalanceELCROSS APPLY将获得当前和以前记录的总和雇员。

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; 
+0

- “EL2.Prev_OpeningEL”此列不存在于两个表 – user3657122

+0

thanx很多人,它工作正常:) – user3657122