SQL计算几个月的疾病天数

时间:2017-05-25 10:19:45

标签: sql sql-server date reporting-services calculation

我目前的查询写得非常糟糕,可以查明几个月内的实际疾病日(例如 - 如果员工的病假开始日期为01/01/2017,结束日期为2017年3月1日,它将计算他们应该工作的所有病假(例如,周一至周五,然而,没有固定的工作模式)并将他们生病的月份分开。目前的报告需要10分钟才能运行一个会计年度。

我想重新编写查询,以使其表现更好,并且(可能)更准确。

我有三个主要表格可供使用:

  • 一项活动'员工在开始时间和结束时间填写的表格。由于这记录了所有活动,他们的午休时间显示为活动间隙 - [-----]午餐休息[---------]
  • 显示疾病开始日期和结束日期的疾病表
  • 日历表,其中包含您可以想象的所有格式的日期

下表的例子。

疾病表:

 EMP ID | Start Date       | End Date         | Location ID 
--------|------------------|------------------|-------------
 1      | 01/02/2017 08:30 | 19/03/2017 23:59 | 20          
 2      | 04/02/2017 08:30 | 06/02/2017 23:59 | 4           
 3      | 02/02/2017 09:00 | 03/02/2017 23:59 | 15          
 4      | 03/02/2017 08:45 | 03/02/2017 23:59 | 7           
 5      | 05/02/2017 08:30 | 10/04/2017 23:59 | 9           

活动表:

| EMP ID | Start Date       | End Date         | Activity Type | Location ID | Group ID |
|--------|------------------|------------------|---------------|-------------|----------|
| 1      | 02/01/2017 13:18 | 02/01/2017 17:00 | 11            | 20          | 1        |
| 1      | 02/01/2017 08:30 | 02/01/2017 12:12 | 11            | 20          | 1        |
| 2      | 02/01/2017 13:18 | 02/01/2017 17:00 | 13            | 4           | 4        |
| 2      | 02/01/2017 08:30 | 02/01/2017 12:12 | 13            | 4           | 4        |
| 3      | 02/01/2017 13:18 | 02/01/2017 17:00 | 1             | 15          | 2        |
| 3      | 02/01/2017 08:30 | 02/01/2017 12:12 | 1             | 15          | 2        |
| 4      | 02/01/2017 13:18 | 02/01/2017 17:00 | 4             | 7           | 5        |
| 4      | 02/01/2017 08:30 | 02/01/2017 12:12 | 4             | 7           | 5        |
| 5      | 02/01/2017 13:18 | 02/01/2017 17:00 | 10            | 9           | 3        |
| 5      | 02/01/2017 08:30 | 02/01/2017 12:12 | 10            | 9           | 3        |
| 5      | 02/01/2017 17:00 | 02/01/2017 18:00 | 3             | 9           | 3        |

结果将在表格/矩阵中用于SSRS,如下所示:

| Group | Location | Total Sickness Days - Months (fiscal year -   April-Mar) |
|-------|----------|----------------------------------------------------------|
| 1     | 20       | xx                                                       |
| 2     | 4        | xx                                                       |
| 3     | 15       | xx                                                       |
| 4     | 7        | xx                                                       |
| 5     | 9        | xx                                                       |

我不确定这种查询的最佳做法是什么。任何帮助将非常感谢并提前感谢。

编辑:逻辑。

  • 如果有人生病超过其工作日的50%,则计算病假。如果有人在工作日的50%工作后回家生病,那就算不上一天了。
  • 班次不会在另一天重叠

0 个答案:

没有答案