合并旧表与新表与不同的结构

时间:2016-01-22 08:28:49

标签: sql sql-server sql-server-2012

我正在使用SQL Server 2012.我有两个表需要'合并'。这两个表称为tblOldtblNew

  • tblOld包含2012年至2013年的数据
  • tblNew包含2013年以后的数据且结构不同

表格之间的日期不重叠。

表格的简单示例:

旧表

t_date       region    sub_region   sales      
------------------------------------------
1 Jan 2012   US        QR           2
1 Jan 2012   US        NT           3
1 Jan 2012   EU        QR           5
2 Jan 2012   US        QR           4
2 Jan 2012   US        NT           6
2 Jan 2012   EU        QR           10
...
31 Dec 2013  US        QR           8
31 Dec 2013  US        NT           9
31 Dec 2013  EU        QR           15

新表

t_date       region    sales
-----------------------------
1 Jan 2014   US        20    
1 Jan 2014   EU        50
2 Jan 2014   US        40
2 Jan 2014   EU        100
...
31 Dec 2014  US        80 
31 Dec 2014  EU        150

结果我正在寻找:

t_date        US QR      US NT    EU
-------------------------------------
1 Jan 2012    2          3        5
2 Jan 2012    4          6        10
...
31 Dec 2013   8          9        15
1 Jan 2014    20                  50
2 Jan 2014    40                  100
...
31 Dec 2014   80                  150 

所以我正在尝试创建一个查询,它会给我上面的结果,虽然我不知道该怎么做或者是否可以完成?

2 个答案:

答案 0 :(得分:2)

SELECT t_date,
SUM(CASE WHEN region='US' AND (sub_region='QR' OR sub_region IS NULL) THEN sales ELSE 0 END) 'US QR',
SUM(CASE WHEN region='US' AND sub_region='NT' THEN sales ELSE 0 END) 'US NT',
SUM(CASE WHEN region='EU' THEN sales ELSE 0 END) 'EU'
FROM (
    SELECT t_date
          ,region
          ,sub_region
          ,sales
      FROM tblOLD
    UNION ALL
    SELECT t_date
          ,region
          ,NULL
          ,sales
      FROM tblNEW
) t
GROUP BY t_date

答案 1 :(得分:1)

您正在寻找两个表的UNION:

SELECT t_date
      ,region
      ,sales
      ,sub_region
  FROM tblOLD
 UNION ALL
SELECT t_date
      ,region
      ,NULL
      ,sales
  FROM tblNEW