当前位置: 代码迷 >> Sql Server >> 大家好,好久没来了,提个有关问题吧
  详细解决方案

大家好,好久没来了,提个有关问题吧

热度:55   发布时间:2016-04-24 10:15:48.0
大家好,好久没来了,提个问题吧
调休统计表:(sno 自增)
sno USER_ID 请假结算范围 调休时长
1 L994               140416-140515 6
2 L994               140416-140515 2
3 L995               140416-140515 1
4 L995               140416-140515 4
5 L1593             140416-140515 3

加班明细表:(sno 自增)
sno USER_ID DATE            加班时长           冲抵调休时长
1 L1593      2014/4/16 0:00 4                           0
2 L994               2014/4/16 0:00 3.5                           0
3 L995              2014/4/16 0:00 2                            0
4 L995        2014/4/17 0:00 2                           0
5 L1593      2014/4/17 0:00 4                              0
6 L994               2014/4/17 0:00 1                                  0
7 L995               2014/4/18 0:00 2                                     0
8 L995               2014/4/19 0:00 8                                      0

要做的是将【调休统计表】中的【调休时长】冲抵到【加班明细表】的冲抵到【冲抵调休时长】字段。
如上面的测试数据结果为:
sno USER_ID DATE            加班时长           冲抵调休时长
1 L1593      2014/4/16 0:00 4                           3
2 L994               2014/4/16 0:00 3.5                           3.5
3 L995              2014/4/16 0:00 2                           2
4 L995        2014/4/17 0:00 2                           2
5 L1593      2014/4/17 0:00 4                           0
6 L994               2014/4/17 0:00 1                           1
7 L995               2014/4/18 0:00 2                           1
8 L995               2014/4/19 0:00 8                            0

帮朋友个忙,自己没时间搞这些,谢谢各位,谢谢~~
------解决方案--------------------
看起来类似存库的先进先出、。
------解决方案--------------------

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
  相关解决方案