2016-01-22 50 views
-2

我正在使用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 

所以我试图创建一个查询,它会给我上面的结果,但我不知道如何做到这一点,或者如果可以做到这一点?

回答

1

您正在寻找两个表的UNION:

SELECT t_date 
     ,region 
     ,sales 
     ,sub_region 
    FROM tblOLD 
UNION ALL 
SELECT t_date 
     ,region 
     ,NULL 
     ,sales 
    FROM tblNEW 
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