2015-03-07 2 views
0

Мне нужно написать sql для нескольких вставок на основе диапазона дат. Например, у меня есть член 12, у которого есть дата начала с 01.01.2012 до 12/31/2014. Мне нужно вставить строку каждый месяц (12 из них) в таблицу. Мне нужно сравнить эту информацию с таблицей, которая уже была расширена таким образом. Любая помощь будет оценена по достоинству. Пример вводаSQL Вставка нескольких строк на основе диапазона дат

client amount  start   end   numpymtmths 

12  $3000  01/01/2014  03/31/2014  03 

13  $700  06/01/2014  12/31/2014  07 

необходимость расширения его выглядеть следующим образом:

client amount  paydate  
12  $1000  201401  
12  $1000  201402 
12  $1000  201403  
13  $100  201406 
13  $100  201407  
13  $100  201408 
13  $100  201409 
13  $100  201410 
13  $100  201411 
13  $100  201412 

ответ

0

Чтобы разделить данные, вам необходимо либо иметь таблицу чисел (или месяцев) или создать его динамически для пример с CTE. Решение CTE может выглядеть примерно так:

with n1(n) as (
    select 1 union all select 1 union all 
    select 1 union all select 1 union all 
    select 1 union all select 1 union all 
    select 1 union all select 1 union all 
    select 1 union all select 1 
), 
n(n) as (
    select row_number() over (order by (select null)) - 1 
    from n1 cross join n1 as n2 
) 

select client, amount/numpymtmths, dateadd(month, n.n, start) as month 
from payment 
join n on n.n < numpymtmths 
order by client, month 

Это в настоящее время ограничено в течение 100 месяцев (10 х 10 числа присоединившихся в КТР).

SQL Fiddle: http://sqlfiddle.com/#!6/dee75/2

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