SQL Pivot日期

时间:2018-02-01 19:27:42

标签: sql date pivot transpose

我无法转置此数据。我有一个开始和结束日期,但需要考虑每天使用的资源总数。我想转动数据,以便它可以计算项目的每一天和所需的资源数量。我已经发布了源数据的样子。我想我需要使用光标来解析数据,但我不确定如何计算开始和结束之间的每一天。任何帮助将不胜感激。

来源数据:

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

2 个答案:

答案 0 :(得分:1)

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

get_protectedC()

或者,使用Numbers表... (使用日期函数的SQL Server语法。)

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

答案 1 :(得分:0)

在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,只需使用任何其他大表。