2013-03-25 3 views
0

У меня есть таблица SQL, в которой я сохраняю информацию о проекте, поступающую от primavera. Предположим, что у меня есть столбцы для начальной даты, даты окончания, продолжительности и общего количества, как показано ниже. Как я могу распределить Total Qty за Месяцами, используя эту информацию. Какие дополнительные столбцы, sql-запросы, которые мне нужны, чтобы получить правильный ежемесячный дистрибутив?Как сделать распределение по времени в SQL?

Спасибо заранее.

Столбцы в порядке:

itemname,quantity,startdate,duration,enddate 

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

Как будет рассчитываться месяц от StartDate и EndDate, если они не в том же месяце? –

+0

Какая СУБД вы используете? Postgres? Oracle? –

+0

Я использую MSSQL 2008. Например, я могу найти ежедневное количество, разделив qty/duration. Но я не знаю, как распределять их ежемесячно. – user2206830

ответ

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; 

Это работает, потому что все месяцы в том же году - как в вашем примере. Вы совершенно расплывчаты в том, как следует рассчитать раскол. Итак, я предполагал, что каждый месяц от начала до конца получает равную сумму.

+0

Спасибо, как-то я справился с этим распределением с помощью таблицы календаря, которая пересекается. – user2206830

Смежные вопросы