如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2014年8月7日

SQL案例 - Full Outer Join 應用

作者: Fred Wang (FW知識瑣記) 日期: 2014/8/7

    下圖類型的問題, 最好用甚麼Join方法來完成呢?
    以筆者遇到的個案, 如何在一張表格中列出各個客戶的未結帳的銷貨金額, 應收帳款金額與 應收票據未兌現金額,而三個種資訊分別在三個不同的資料庫表中。






最好的方式就是用Full Outer Join,  以上面個案 Key就是客戶代號, P表格代表銷貨單, P表中的FieldA為未結帳銷貨金額; Q表格代表結帳單, Q表中的FieldB為應收帳款金額(結帳未收款金額), 以下SQL就是解法 :
select ISNULL(P.Key, Q.Key), ISNULL(P.FieldA,0), ISNULL(Q.FieldB,0)
from Table1 as P
full outer join Table2 as Q
on P.Key = Q.Key 

如果要Full Outer Join三個表呢? 就要用下面的SQL
select COALESCEL(P.Key, Q.Key, R.Key), ISNULL(P.FieldA,0), ISNULL(Q.FieldB,0), ISNULL(R.FieldC,0)
from Table1 as P
full outer join Table2 as Q
on P.Key = Q.Key
full outer join Table3 as R
on P.Key = R.Key

要注意的是 COALESCEL 這個函式,與ISNULL不同,COALESCEL()內的參數,可以有多個,傳回參數值由左到右第一個非NULL的參數值。

沒有留言:

張貼留言

歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)