Объединение таблиц в t-sql - PullRequest
       21

Объединение таблиц в t-sql

0 голосов
/ 26 августа 2011

У меня есть таблица с периодами и ценами, что-то вроде этого

itemid periodid    periodstart     periodend     price
1      1           2011/01/01      2011/05/01    50.00
1      2           2011/05/02      2011/08/01    80.00
1      3           2011/08/02      2011/12/31    50.00

Теперь у меня есть вторая таблица, которая может содержать отдельные даты или периоды

itemid periodid periodstart periodend    price
1      8        2011/07/01  2011/07/17   70.00

Теперь, как мне сделать запрос, который бы дал следующий результат?

itemid periodid    periodstart     periodend     price
    1      1           2011/01/01      2011/05/01    50.00
    1      2           2011/05/02      2011/06/30    80.00 ****
    1      8           2011/07/01      2011/07/17    70.00  ***
    1      2           2011/07/18      2011/08/01    80.00 ****
    1      3           2011/08/02      2011/12/31    50.00

РЕДАКТИРОВАТЬ - выделите тот факт, что слияние изменяет даты вокруг него

Ответы [ 3 ]

1 голос
/ 26 августа 2011

Как насчет чего-то вроде

select 
 t1.itemid,t1.periodid,t1.periodstart, coalesce(dateadd(d,-1,t2.periodstart),t1.periodend) as periodend, t1.price
 from t1
 left outer join t2 on t1.periodstart < t2.periodstart and t1.periodend>t2.periodstart and t1.itemid=t2.itemid
 union
select 
 t2.itemid,t2.periodid,t2.periodstart, t2.periodend, t2.price
 from t1
 inner join t2 on t1.periodstart < t2.periodstart and t1.periodend>t2.periodstart and t1.itemid=t2.itemid
 union
select 
 t1.itemid,t1.periodid,dateAdd(d,1,t2.periodend), t1.periodend, t1.price
 from t1
 inner join t2 on t1.periodstart < t2.periodend and t1.periodend>t2.periodend and t1.itemid=t2.itemid

order by periodstart
0 голосов
/ 26 августа 2011

Вы учитываете записи, которые выстраиваются в линию, или вы просто пытаетесь объединить строки?

если последний, вы могли бы просто сделать союз

Select itemid, periodid, periodstart, periodend, price 
From Table1
Union
Select itemid, periodid, periodstart, periodend, price 
From Table2
0 голосов
/ 26 августа 2011

Использовать союз?

 Select itemid, periodid,periodstart, periodend,price FROM table1
 UNION
 SELECT itemid, periodid,periodstart, periodend,price FROM table2

Вы пытаетесь сделать какое-то соединение? набор результатов не соответствует двум таблицам, которые вы указали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...