我需要透视表中的数据的帮助。我有一个假期申请表
CREATE TABLE EmpVacRequest
(EmpID int, VacReqPri int , StartDate date, EndDate date)
我用样本数据播种
INSERT INTO EmpVacRequest
(EmpID,VacReqPri,StartDate,EndDate) VALUES (100,1,'2016-1-1','2016-1-3')
INSERT INTO EmpVacRequest
(EmpID,VacReqPri,StartDate,EndDate) VALUES (100,2,'2016-2-4','2016-2-8')
INSERT INTO EmpVacRequest
(EmpID,VacReqPri,StartDate,EndDate) VALUES (200,1,'2016-1-2','2016-1-5')
INSERT INTO EmpVacRequest
(EmpID,VacReqPri,StartDate,EndDate) VALUES (200,2,'2016-2-1','2016-2-3')
我需要的输出看起来像这样:
EmpId Vac1Start Vac1End Vac2Start Vac2End
100 2016-1-1 2016-1-3 2016-2-4 2016-2-8
200 2016-1-2 2016-1-5 2016-2-1 2016-2-3
每个员工仅获得4个优先级为1-4的休假请求,因此我想也许我会创建一个带有硬编码列的新表,并使用Cursor或CTE填充它,但我希望有人可能有一个更优雅的解决方案。
我在这里有一个SQLFiddle,如果它有助于提供解决方案。
这是2的查询。您可以轻松地将其扩展为4。
WITH EMPVACREQUESTCTE AS
(
SELECT VACREQPRI AS RN,* FROM EMPVACREQUEST
)
SELECT T1.EMPID,MAX(STARTDATE1) AS VAC1START,MAX(ENDDATE1) AS VAC1END,MAX(STARTDATE2) AS VAC2START,MAX(ENDDATE2) AS VAC1END FROM
(
SELECT RN,EMPID,MAX([1]) STARTDATE1,MAX([2]) STARTDATE2 FROM
(
SELECT * FROM EMPVACREQUESTCTE
PIVOT
(MAX(STARTDATE) FOR VACREQPRI IN ([1],[2])) P
) K
GROUP BY EMPID,RN
)T1
INNER JOIN
(
SELECT RN,EMPID,MAX([1]) ENDDATE1,MAX([2]) ENDDATE2 FROM
(
SELECT * FROM EMPVACREQUESTCTE
PIVOT
(MAX(ENDDATE) FOR VACREQPRI IN ([1],[2])) P
) K
GROUP BY EMPID,RN
)T2
ON T1.EMPID = T2.EMPID AND T1.RN = T2.RN
GROUP BY T1.EMPID
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句