2011-12-22 48 views
1

中的數據我覺得這有一個非常簡單的解決方案,我只是遭受了腦凍結,但我希望你能提供幫助。合併2個查詢的結果,其中加入的列可能缺少表

我有2個表格具有相同的佈局,但來自不同系統的數據,我想將它們組合在查詢中用於報告目的。但是我通常會加入的列可能只有一個或另一個表中的值。

表A

Date  | Sales 
------------------- 
20/12/2010 | 500 
19/12/2010 | 450 

表B

Date  | Sales 
------------------- 
20/12/2010 | 200 
18/12/2010 | 70 

我想在這些的結果設置爲這樣:

結果

Date  | Sales A | Sales B 
------------------------------- 
20/12/2010 | 500  | 200 
19/12/2010 | 450  | NULL 
18/12/2010 | NULL | 70 

這看起來很簡單明顯,但我無法正確理解,幫助將不勝感激。

回答

5

Using Outer Joins in SQL Server

使用全外連接
要通過在的連接,使用全外連接的結果不匹配的行保留這種不匹配的信息。 Microsoft®SQL Server™2000提供了完整的外連接運算符FULL OUTER JOIN,該運算符包括兩個表中的所有行,而不管其他表是否具有匹配的值。

select 
    coalesce(TableA.Date, TableB.Date) as Date, 
    TableA.Sales as SalesA, 
    TableB.Sales as SalesB 
from 
    TableA 
    full join TableB on TableA.Date = TableB.Date 
+0

非常感謝!爲我節省了很多時間! – Martyn 2011-12-22 10:23:43

0

可以使用full outer join匹配來自兩個表的查詢。然後isnull可以選擇從左側或右側日期:

select IsNull(A.Date, B.Date) as Date 
,  A.Sales as [Sales A] 
,  A.Sales as [Sales B] 
from A 
full outer join B 
on  A.Date = B.Date 

有趣的閱讀:Coding Horror post on SQL join types