合并t-sql中的表

时间:2011-08-25 22:11:51

标签: tsql merge

我有一张包含期间和价格的表格,就像这样

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 个答案:

答案 0 :(得分:1)

这样的东西
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

答案 1 :(得分:0)

使用联盟?

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

你想尝试某种加入吗?结果集与您提供的两个表不匹配。

答案 2 :(得分:0)

您是在考虑排队的条目还是仅仅想要合并行?

如果是后者,你可以做一个联盟

Select itemid, periodid, periodstart, periodend, price 
From Table1
Union
Select itemid, periodid, periodstart, periodend, price 
From Table2