MS SQL - 分组顺序日期(忽略周末和假日)返回开始日期和结束日期,同时计算小时数

时间:2016-08-22 17:38:34

标签: sql-server date grouping datediff

我希望有人可以帮忙。我已经看到了解决这个问题部分的解决方案,但是还没有能够将它们全部加在一起以提取我需要的数据。

我有一张包含时间表条目的表格,每行包含一名员工,交易日期,项目代码以及针对它的小时数。

示例:

Employee, Date, Code, Hours
00001, 2016-08-01, FunProject1, 6.0
00001, 2016-08-01, FunProject2, 2.0
00045, 2016-08-01, FunProject5, 8.0
00086, 2016-08-01, FunProject1, 8.0

我还有一张包含标准假期/假期的表格。

HolidayDate, HolidayName
2016-08-30, SomeoneDiedDay
2016-09-01, SomeoneWasBornDay

我想要做的是创建针对特定代码的小时数的报告,并将日期分组在一起,创建使用该代码的开始日期和结束日期,然后是针对特定代码的总小时数它(假设8小时计为1天)。

Employee ID, Code, Start Date, End Date, Total Hours, Total Days
00001, FunProject1, 2016-08-01, 2016-08-15, 88, 11
00086, FunProject1, 2016-08-01, 2016-08-01, 8, 1

结果应忽略周末(从当前日期前的-365天开始)和现有表格中的任何假期/休假。

我在下面有一半:

SELECT Employee, 
       dateadd(d, - row_number() over (partition by Employee order by Date), Date) as StartDate, Date, SUM(Hrs)AS TotalHours
       FROM HrsDetail
WHERE (Code = 'FunProject1' AND DATEPART(YYYY, Date) = '2017' AND (TotalHours != '0.00'))
GROUP BY Employee, Date

(此代码不包括整年,但我想打破这一点,以了解查询正在执行的操作的每个部分,并首先解决分组问题)。我现在如何分组日期以排除假期表和周末?

欢迎任何建议或指示!

0 个答案:

没有答案