SQL如何在重复的日期范围内按ID分组

艾伦·费希尔(Alan Fisher)

我需要透视表中的数据的帮助。我有一个假期申请表

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。

SQL小提琴

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何按日期范围内的每个日期对对象进行分组

来自分类Dev

在日期范围内按日/月/周分组

来自分类Dev

sql查询按连续日期范围内的数据进行分组

来自分类Dev

如何在范围内添加日期

来自分类Dev

如何在日期范围内的每个日期获得3个重复的名字?

来自分类Dev

如何按组填写范围内的缺失日期

来自分类Dev

按范围内的列分组

来自分类Dev

连续日期范围内的最小和最大日期(按名称分组)

来自分类Dev

如何在列范围内对观察结果进行分组?

来自分类Dev

MySQL:如何在一定范围内“分组”?

来自分类Dev

如何在Oracle SQL中查找日期范围内的丢失数据

来自分类Dev

如何在 SQL Server 中查询特定日期范围内的数据

来自分类Dev

SQL查询以总计列和按范围内的间隔分组,其中包括该范围内的每个间隔

来自分类Dev

我如何在DRF的日期范围内获得项目

来自分类Dev

如何在根范围内访问解决日期

来自分类Dev

如何在日期范围内删除元素

来自分类Dev

Firebase,如何在日期范围内对键进行排序

来自分类Dev

SQL分组到范围内?

来自分类Dev

SQL如何在变化的时间范围内计算不同的ID

来自分类Dev

如何在不连续范围内跳过分组时对记录进行分组?

来自分类Dev

SQL在日期范围内的分割数

来自分类Dev

SQL Server在日期范围内的聚合

来自分类Dev

SQL选择范围内的日期

来自分类Dev

SQL Server:按范围分组日期

来自分类Dev

SQL按相对日期范围分组

来自分类Dev

SQL按偏移日期范围分组

来自分类Dev

SQL按偏移日期范围分组

来自分类Dev

按汇总分组以查找范围内的缺失值

来自分类Dev

按范围内的所有天分组

Related 相关文章

热门标签

归档