【发布时间】:2020-02-21 06:31:35
【问题描述】:
我想总结公司员工在给定两周时间段(工资期)内的总工作时间。我有一个视图,它为唯一的员工标识符 [CODE_USER] 拉出一列,为唯一标识的薪酬类型(常规、加班、假期、假期等)[代码]、总工作时间 [小时] 和工作周 [Day] 中每一天的列。
就目前而言,[小时数] 列显示每位独特员工每天的总工作时间(基于独特的薪酬类型,例如正常工作时间或加班时间)。
我需要将每个员工 [CODE_USER]、每种薪酬类型 [CODE] 在两周内的所有工作时间合并到一个名为“小时”的汇总列中。
假设员工 ID 在两周内正常工作 80 小时,加班时间为 20 小时(E1 等于正常时间,E2 等于加班时间),理想的最终结果如下所示:
CODE_USER Code Hours
125 E1 80.00
125 E2 20.00
我认为我最接近解决它的是以下代码,但是它不会在两周内为唯一的 CODE_USER 工作的总小时数,它将两周内每天的工作小时数列为该员工的行集合。例如,下面的代码显示员工 ID 125 的 18 行,员工在 E1(常规)标记的时间段内工作了 10 个完整的 8.00 小时天,并且员工在 E2 标记的时间段(加班)中有 8 次加班时间)。
代码:
SELECT [CODE_USER],
[Code],
SUM(Hours) AS Hours,
[Day]
FROM [LookUp].[dbo].[Daily_Hours_Worked]
WHERE [Day] >= '20191007' AND [Day] < '20191019'
AND [CODE_USER] LIKE '%125%'
GROUP BY [CODE_USER], [Code], [Hours], [Day]
ORDER BY [CODE_USER], [Day] DESC;
结果:
CODE_USER Code Hours Day
125 E1 8.00 2019-10-18 00:00:00.000
125 E2 0.70 2019-10-18 00:00:00.000
125 E1 8.00 2019-10-17 00:00:00.000
125 E2 1.65 2019-10-17 00:00:00.000
125 E1 8.00 2019-10-16 00:00:00.000
125 E2 1.15 2019-10-16 00:00:00.000
125 E1 8.00 2019-10-15 00:00:00.000
125 E2 0.97 2019-10-15 00:00:00.000
125 E1 8.00 2019-10-14 00:00:00.000
125 E2 1.99 2019-10-14 00:00:00.000
125 E1 8.00 2019-10-11 00:00:00.000
125 E2 0.12 2019-10-11 00:00:00.000
125 E1 8.00 2019-10-10 00:00:00.000
125 E2 0.05 2019-10-10 00:00:00.000
125 E1 8.00 2019-10-09 00:00:00.000
125 E2 0.10 2019-10-09 00:00:00.000
125 E1 7.99 2019-10-08 00:00:00.000
125 E1 7.99 2019-10-07 00:00:00.000
预期结果:
我想查看表中每个唯一员工 ID [CODE_USER] 的输入支付周期(2 周周期)的 E1、E2 等的总和。最终结果应该是每个员工的两行,其中包含正常时间 (E1) 和加班 (E2) 的员工在给定时间段内为每个类别工作的小时数。
【问题讨论】:
标签: sql sql-server tsql