SQL Server - 根据时间从单个记录创建多个行

时间:2012-12-12 19:37:48

标签: sql-server-2008

我正在尝试创建一个查询,该查询从包含开始月份和结束月份的记录的表中返回每个月的单独行。例如。如果记录的开始月份为2012年1月和2012年3月的结束月份,我希望返回三行 - 2012年1月,2012年2月和2012年3月。开始和结束月份之间的实际差距可能跨越几年,需要返回的行数将因记录而异。实际目的是将总成本分成每月费用

类似的东西:

记录:

Value  Start Month  End Month
 30     Jan 2012     March 2012

查询返回

Value  Month
 10    Jan 2012
 10    Feb 2012
 10    March 2012

一直在寻找几个小时 - 任何人都可以帮助我!!!非常感谢提前。

1 个答案:

答案 0 :(得分:0)

如果您有一个整数表,您可以加入table of integers的日期部分,它将为您提供月份范围。另一个月份描述表的连接将为您提供标签。要获得拆分成本,您需要计算出两者之间的行数并除以成本(假设它是直接拆分。

    select 
    bb.integer as MonthDesc,
cc.MonthDescription,
aa.MyCost / datediff(mm,mydatefield, mydatefield2)
    datepart(yy, mydatefield)
    from dbo.tblMyTableofFacts aa
    inner join dbo.tblMyTableOfInters bb
    on bb.integer between datepart(mm,mydatefield) and datepart(mm,mydatefield2)

inner join dbo.tblMyTableOfMonths cc
on bb.Integer = cc.MonthNumber