对重叠日期进行分组

时间:2013-08-03 06:28:12

标签: sql sql-server group-by

这很难解释,但我正在编写一个小型系统来管理我的scrum项目。基础是:我有一个项目,可以有很多冲刺,冲刺可以分成几个部分。例如,项目A有4个冲刺。每个sprint都分为Planning,Sprint和Stabilization部分。

我正在使用SQL Server 2012。

sprint可以与另一个sprint重叠。这允许一些开发人员参与sprint B的计划,而其他开发人员仍然在Sprint A中进行稳定化。因此,两个sprint的规划和稳定在同一周内。

应用程序处理得很好。我的问题在于我想要创建的报告。我希望它列出y轴上的日期,x轴显示资源及其分配的内容。资源一次只能是一个sprint的一部分。

目前,我只是试图查询项目的日期,该日期所涵盖的sprint以及sprint部分。但我只希望每个日期值返回一行。由于重叠,我得到重复的日期值。

这是我当前的查询:(日历只是所有可能的日期,日期上有一些方便的数据)

SELECT
    cal.DateValue,
    ps.Description,
    pss.Description
FROM calendar cal
INNER JOIN project p
    ON cal.DateValue BETWEEN p.StartDate AND p.EndDate
INNER JOIN project_sprint ps
    ON ps.ProjectId = p.Id
    AND cal.DateValue BETWEEN ps.StartDate AND ps.EndDate
    AND ps.Deleted IS NULL
INNER JOIN project_sprint_section pss
    ON pss.ProjectSprintId = ps.Id
    AND cal.DateValue BETWEEN pss.StartDate AND pss.EndDate
    AND pss.Deleted IS NULL
WHERE p.Id = 26
ORDER BY cal.DateValue

以下是我的回复,展示了我的问题:

enter image description here

从第4天到第9天,计划和稳定重叠。

我希望查询要做的是,使用一个组,可能会将第二个描述返回为:“Planning / Stabilization”,用于重叠日期。

但我不确定是否有一种有效的方法可以做到这一点。可以通过群组完成,看看是否有计数> 1,然后连接两行描述?

1 个答案:

答案 0 :(得分:0)

Here是一个示例,如果您想将CTE用于组连接。但我不推荐它。您可以简单地使用XML方法来做同样的事情。