2014-02-28 80 views
0

需要幫助,根據3個不同的日期從3個不同的表格中捕捉記錄。從任何表中的任何交易應被包括並且結果相結合在可能的情況: 樣本數據加入3個表格,每個表格都要返回

Table 1 sales table 
Item#, Sold Date, invoice, etc. 
111, 1/2/14, poabc 
222, 1/3/14, poedf 
123, 1/4/14, poxyz 

Table 2 process table 
Item#, proc Date, paid amt, etc. 
111, 1/12/14, 12 
456, 1/25/14, 16 

Table 3 canceled table 
Item#, cancel date, reason, etc. 
222, 1/8/14, reason1 
555, 1/9/14, reason2 

結果應包括用於每個銷售的任何項目,加工或日期範圍內取消,一個行 - 實例結果
項目#,出售日期,PROC日期,註銷日期,原因等

111, 1/2/14, 1/12/14, (null) , (null) , 
222, 1/3/14, (null) , 1/8/14, reason1 
123, 1/4/14, (null) , (null) , (null) , 
456, (null), 1/25/14, (null) , (null) , 
555, (null) , (null) ,1/9/14, reason2 

不知道如何處理,聯合,加盟等嘗試了看法,基於項目#S,左上PROC外=出售(+)和proc =取消(+),然後與取消物品編號的第二個視圖聯合沒有在上面,左外部取消= proc(+)和取消=出售(+)和(過程IS NULL和出售IS NULL)那麼什麼?不知道這是最好的辦法或如何設置它

回答

0

您可以使用大多數數據庫支持的full outer join做到這一點。

select coalesce(s.item, p.item,) as item, 
     s.SoldDate, p.procDate, c.cancelledDate, c.reason 
from sales s full outer join 
    process p 
    on p.item = s.item full outer join 
    cancelled c 
    on c.item = coalesce(s.item, c.item); 
+0

我有3個其他表加入到地址和電話等添加詳細信息,我可以只是保持addng的聲明呢? – user3363178

+0

如果他們只有一個行的子集,你可以做同樣的事情。 。 。但請記住爲每個條件擴展'coalesce()'。 –

+0

其他桌子上的鑰匙會有所不同,大部分都是從項目#中驅除的,但有些會被客戶#驅趕,例如 – user3363178