我有一张包含员工缺勤条目的表格。这些行包含员工编号、缺勤的第一天和最后一天以及大量更多数据,例如缺勤类型、已批准等。
absencecalendarline:
EMPLOYEENUMBER | FIRSTDAYOFABSENCE | LASTDAYOFABSENCE | ABSENCETYPE | APPROVED
---------------+-------------------+------------------+-------------+----------
1 | 2013-01-01 | 2013-01-04 | VACATION | TRUE
2 | 2013-01-01 | 2013-01-02 | VACATION | TRUE
3 | 2013-02-05 | 2013-02-08 | VACATION | TRUE
2 | 2013-02-06 | 2013-02-07 | VACATION | TRUE
我想创建一个视图,其中列出了所有日期的缺勤条目。像这样的东西。
desired result:
EMPLOYEENUMBER | ABSENCEDATE | ABSENCETYPE | APPROVED
---------------+-------------+-------------+----------
1 | 2013-01-01 | VACATION | TRUE
1 | 2013-01-02 | VACATION | TRUE
1 | 2013-01-03 | VACATION | TRUE
1 | 2013-01-04 | VACATION | TRUE
2 | 2013-01-01 | VACATION | TRUE
2 | 2013-01-02 | VACATION | TRUE
3 | 2013-02-05 | VACATION | TRUE
.. .. .. ..
3 | 2013-02-08 | VACATION | TRUE
2 | 2013-02-06 | VACATION | TRUE
2 | 2013-02-07 | VACATION | TRUE
我还有一个日期表,CALENDARDAY
其中包含日历中的所有日期以及周数、月份等相关信息,以帮助我了解日期人口。
我对此查询的尝试导致了以下代码:
SELECT unpvt.EMPLOYEENUMBER, unpvt.FIRSTORLAST, unpvt.ABSENCEDATE, unpvt.FIRSTABSENCE,
unpvt.LASTABSENCE, unpvt.ABSENCETYPE, unpvt.APPROVED, cd.THEDATE, cd.WEEKNUMBER,
(SELECT TOP 1 EMPLOYEENUMBER
FROM dbo.ABSENCECALENDARLINE asq
WHERE cd.THEDATE BETWEEN asq.FIRSTDAYOFABSENCE AND asq.LASTDAYOFABSENCE
ORDER BY cd.THEDATE DESC) EMPLOYEENUMBER
FROM
(SELECT EMPLOYEENUMBER, FIRSTDAYOFABSENCE, LASTDAYOFABSENCE, FIRSTDAYOFABSENCE AS
FIRSTABSENCE, LASTDAYOFABSENCE AS LASTABSENCE, ABSENCETYPE, APPROVED
FROM dbo.ABSENCECALENDARLINE acl) a
UNPIVOT
(ABSENCEDATE FOR FIRSTORLAST IN
(FIRSTDAYOFABSENCE, LASTDAYOFABSENCE)
) AS unpvt
RIGHT JOIN dbo.CALENDARDAY cd ON unpvt.ABSENCEDATE = cd.THEDATE
WHERE CAST(THEDATE AS datetime) BETWEEN '2013-01-01' AND '2013-12-31'
ORDER BY THEDATE
我遇到的挑战是SELECT
子查询,它要求TOP 1
导致重叠缺勤仅返回给定日期缺勤的一名员工。此列上的ACOUNT
返回当天缺席的人数。
我是不是想的太复杂了?我怎样才能轻松达到我想要的结果?任何帮助将不胜感激。
最好的问候,亚历山大