2016-09-30 78 views
0

我有兩個表:合併結果FULL OUTER組連接

|ORDER_ID|ORDER_DATE|AMOUNT| 
|00000001| 12-SEP-16| 900| 
|00000002| 13-SEP-16| 1400| 
|00000003| 14-SEP-16| 1000| 
|00000004| 15-SEP-16| 700| 

|ORDER_ID|PURCHASE_ID|PURCHASE_DATE|AMOUNT| 
|00000002| 00000001| 20-SEP-16| 1450| 
|00000004| 00000002| 21-SEP-16| 750| 

我想要的結果是這樣的:

|ORDER_ID|DATE  |AMOUNT_ORDER|AMOUNT_PURCHASE| 
|00000001|12-SEP-16|   900|    | 
|00000002|20-SEP-16|  1400|   1450| 
|00000003|14-SEP-16|  1000|    | 
|00000004|21-SEP-16|   700|   750| 

到目前爲止,我做這個查詢:

SELECT 
    a.ORDER_ID, 
    CASE WHEN b.ORDER_ID IS NULL 
    THEN a.ORDER_DATE 
    ELSE b.PURCHASE_DATE 
    END AS DATE, 
    a.AMOUNT AS AMOUNT_ORDER 
    b.AMOUNT AS AMOUNT_PURCHASE 
FROM TABLE_A a 
FULL OUTER JOIN TABLE_B b 
ON a.ORDER_ID = b.ORDER_ID 

有沒有另一種有效的方法來查詢這個?

+0

什麼是錯的代碼,你貼? – Blorgbeard

+0

你不需要使用Full Outer Join,你可以使用從表b到表a的簡單連接,因爲表b中的訂單ID不允許空值(這是我的假設) –

回答

0

根據您的要求,您可以使用LEFT JOIN實現相同的輸出:如果兩個表中都必須有數據,那麼INNER JOIN是最好的方法,這是可以獲得所有連接概覽的參考LEFT JOIN vs. LEFT OUTER JOIN in SQL Server希望它會有幫助。

SELECT 
    a.ORDER_ID, 
    CASE WHEN b.ORDER_ID IS NULL THEN a.ORDER_DATE 
    ELSE 
    b.PURCHASE_DATE 
    END AS DATE, 
    a.AMOUNT AS AMOUNT_ORDER 
    b.AMOUNT AS AMOUNT_PURCHASE 
FROM TABLE_A a 
LEFT JOIN TABLE_B b ON a.ORDER_ID = b.ORDER_ID 
0

如果你想從兩個表中完整的結果集,然後使用全外連接。

   select 
       a.ORDER_ID, 
       coalesce (a.order_date,b.purchase_date) as DATE, 
       a.AMOUNT AS AMOUNT_ORDER, 
       b.AMOUNT AS AMOUNT_PURCHASE 
       from #table_a a 
       full outer join #table_b b on b.ORDER_ID=a.ORDER_ID 
       order by a.ORDER_ID 

如果只想從Table_a中使用結果使用左連接。

  select 
      a.ORDER_ID, 
      coalesce (a.order_date,b.purchase_date) as DATE, 
      a.AMOUNT AS AMOUNT_ORDER, 
      b.AMOUNT AS AMOUNT_PURCHASE 
      from #table_a a 
      left join #table_b b on b.ORDER_ID=a.ORDER_ID 
      order by a.ORDER_ID 
0
SELECT a.ORDER_ID 
    ,CASE 
     WHEN b.ORDER_ID IS NULL 
      THEN a.ORDER_DATE 
     ELSE b.PURCHASE_DATE 
     END AS DATE 
    ,a.AMOUNT AS AMOUNT_ORDER b.AMOUNT AS AMOUNT_PURCHASE 
FROM TABLE_A a 
RIGHT JOIN TABLE_B b ON a.ORDER_ID = b.ORDER_ID