下圖類型的問題, 最好用甚麼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
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的參數值。
沒有留言:
張貼留言
歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)