SQL 枢轴日期

SQL Pivot Dates

我在转换此数据时遇到问题。我有开始日期和结束日期,但需要说明每天使用的资源总数。我想对数据进行透视,以便它可以说明项目的每一天和所需的资源数量。我已经发布了源数据的样子。我想我需要使用游标来解析数据,但我不确定如何计算开始和结束之间的每一天。任何帮助将不胜感激。

源数据:

Project  Start     Finish      ResourceA  ResourceB
1000     1/1/2018  1/5/2018    10         5
1001     2/1/2018  2/1/2018    3          2

期望的结果:

Project  Date      ResourceA ResourceB
1000     1/1/2018  10        5
1000     1/2/2018  10        5
1000     1/3/2018  10        5
1000     1/4/2018  10        5
1000     1/5/2018  10        5
1001     2/1/2018  3         2

首先创建日历table。一个你可能需要的每个日期。

SELECT
  yourTable.Project,
  calendar.CalendarDate,
  yourTable.ResourceA,
  yourTable.ResourceB
FROM
  yourTable
INNER JOIN
  calendar
    ON calendar.CalendarDate BETWEEN yourTable.Start and yourTable.Finish

或者,使用 Numbers table...(对日期函数使用 SQL 服务器语法。)

SELECT
  yourTable.Project,
  DATEADD(day, numbers.id, yourTable.Start),
  yourTable.ResourceA,
  yourTable.ResourceB
FROM
  yourTable
INNER JOIN
  numbers
    ON  numbers.id >= 0
    AND numbers.id <= DATEDIFF(day, yourTable.Start, yourTable.Finish)

在 t-sql 中,sys.all_objects 可用于生成任意大的系列以进行交叉连接:

select project, dateadd(dd,n-1,start) as date, resourceA, resourceB
 from source_data
inner join 
 (select ROW_NUMBER()  OVER (ORDER BY [object_id]) as n
  FROM sys.all_objects ) numbers on datediff(dd,start,finish)>=n-1

如果不使用 T-SQL,只需使用任何其他大 table。