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