0

我有一个 SQL 表,其中保存了来自 primavera 的项目信息。假设我有如下所示的开始日期、结束日期、持续时间和总数量列。我如何使用这些信息在几个月内分配总数量。为了获得正确的每月分布,我需要什么样的附加列、sql 查询?

提前致谢。

列顺序:

itemname,quantity,startdate,duration,enddate

item1 -- 108 -- 2013-03-25 -- 720 -- 2013-07-26 
item2 -- 640 -- 2013-03-25 -- 720 -- 2013-07-26
  .
  .
4

1 回答 1

0

我认为关键是按月打破记录。以下是如何执行此操作的示例:

with months as (
     select 1 as mon union all select 2 union all select 3 union all
     select 4 as mon union all select 5 union all select 6 union all
     select 7 as mon union all select 8 union all select 9 union all
     select 10 as mon union all select 11 union all select 12
    )
select item, m.mon, quantity / nummonths
from (select t.*, (month(enddate) - month(startdate) + 1) as nummonths
      from t
     ) t join
     months m
     on month(t.startDate) <= m.mon and
        months(t.endDate) >= m.mon;

这是有效的,因为所有月份都在同一年内 - 如您的示例所示。您对如何计算拆分非常模糊。所以,我假设每个月从开始到结束都得到相同的数量。

于 2013-03-25T13:29:59.983 回答