2016-01-22 47 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