with a0 (sno,USERID,请假结算范围,调休时长) AS ( SELECT 1,'L994','140416-140515',6 UNION ALL SELECT 2,'L994','140416-140515',2 UNION ALL SELECT 3,'L995','140416-140515',1 UNION ALL SELECT 4,'L995','140416-140515',4 UNION ALL SELECT 5,'L1593','140416-140515',3 ) ,a1 AS ( SELECT USERID,SUM(调休时长) 调休时长 FROM a0 GROUP BY USERID ) ,a2 (sno,USERID,DATE,加班时长,冲抵调休时长) AS ( SELECT 1,'L1593','2014/4/16 0:00',4,0 UNION ALL SELECT 2,'L994','2014/4/16 0:00',3.5,0 UNION ALL SELECT 3,'L995','2014/4/16 0:00',2,0 UNION ALL SELECT 4,'L995','2014/4/17 0:00',2,0 UNION ALL SELECT 5,'L1593','2014/4/17 0:00',4,0 UNION ALL SELECT 6,'L994','2014/4/17 0:00',1,0 UNION ALL SELECT 7,'L995','2014/4/18 0:00',2,0 UNION ALL SELECT 8,'L995','2014/4/19 0:00',8,0 ) ,a3 AS ( SELECT a.*,(SELECT SUM(加班时长) FROM a2 WHERE USERID=a.USERID AND DATE<=a.DATE) LJ,ISNULL(b.调休时长,0) 调休时长 FROM a2 a LEFT JOIN a1 b ON a.USERID=b.USERID ) SELECT *, CASE WHEN 调休时长>=LJ THEN 加班时长 WHEN 调休时长<LJ AND 调休时长-(LJ-加班时长)>0 THEN CASE when 调休时长>调休时长-(LJ-加班时长) THEN 调休时长-(LJ-加班时长) ELSE 调休时长 end ELSE 0 END FROM a3
with a0 (sno,USERID,请假结算范围,调休时长) AS
(
SELECT 1,'L994','140416-140515',6 UNION ALL
SELECT 2,'L994','140416-140515',2 UNION ALL
SELECT 3,'L995','140416-140515',1 UNION ALL
SELECT 4,'L995','140416-140515',4 UNION ALL
SELECT 5,'L1593','140416-140515',3
)
,a1 AS
(
SELECT USERID,SUM(调休时长) 调休时长 FROM a0 GROUP BY USERID
)
,a2 (sno,USERID,DATE,加班时长,冲抵调休时长) AS
(
SELECT 1,'L1593','2014/4/16 0:00',4,0 UNION ALL
SELECT 2,'L994','2014/4/16 0:00',3.5,0 UNION ALL
SELECT 3,'L995','2014/4/16 0:00',2,0 UNION ALL
SELECT 4,'L995','2014/4/17 0:00',2,0 UNION ALL
SELECT 5,'L1593','2014/4/17 0:00',4,0 UNION ALL
SELECT 6,'L994','2014/4/17 0:00',1,0 UNION ALL
SELECT 7,'L995','2014/4/18 0:00',2,0 UNION ALL
SELECT 8,'L995','2014/4/19 0:00',8,0
)
,a3 AS
(
SELECT a.*,(SELECT SUM(加班时长) FROM a2 WHERE USERID=a.USERID AND DATE<=a.DATE) LJ,ISNULL(b.调休时长,0) 调休时长
FROM a2 a
LEFT JOIN a1 b ON a.USERID=b.USERID
)
SELECT *,
CASE
WHEN 调休时长>=LJ THEN 加班时长
WHEN 调休时长<LJ AND 调休时长-(LJ-加班时长)>0 THEN CASE when 调休时长>调休时长-(LJ-加班时长) THEN 调休时长-(LJ-加班时长) ELSE 调休时长 end
ELSE 0
END
FROM a3