2012-11-19 81 views
3

我正在嘗試編寫一個連接語句,將以下三個數據集合在一起。 (這是使用MS SQL Server)的SQL Full Outer加入

 
Set 1 
ID Date Col1 
1  Jan 11 a1 
1  Jan 13 a2 

Set 2 
ID Date Col2 
1  Jan 11 b1 
1  Jan 15 b2 

Set 3 
ID Date Col3 
1  Jan 15 c1 
1  Jan 17 c2 

Combined Set 
ID Date Col1 Col2 Col3 
1  Jan 11 a1  b1 
1  Jan 13 a2 
1  Jan 15   b2  c1 
1  Jan 17     c2  

我覺得完全外部聯接是能夠做到這一點,但我遇到了重大的跨產品問題。

+0

什麼重要的跨產品你遇到的問題是什麼? –

+2

該數據結構和組合數據很混亂。所有行的ID是否相同?與這些組相關的FK是什麼?你嘗試了什麼,你收到了什麼問題? –

+0

同意。不過,我認爲他不需要結果表中的ID。 –

回答

3

這給一試:

select coalesce(t1.date, t2.date, t3.date) date, col1, col2, col3 from table1 t1 
full outer join table2 t2 on (t1.date = t2.date) 
full outer join table3 t3 on (t2.date = t3.date) 
1

根據您的數據集,看起來您想加入基於date列的3個表格。請注意,我在這裏不考慮ID列,直到你解釋,爲什麼所有的ID設置爲1

SELECT ISNULL(set1.dt, ISNULL(set2.dt, set3.dt)) as 'Date', col1, col2, col3 
FROM set1 
FULL OUTER JOIN set2 ON CAST(set1.dt AS DATE) = CAST(set2.dt AS DATE) 
FULL OUTER JOIN set3 ON CAST(set2.dt AS DATE) = CAST(set3.dt AS DATE) 
+0

查看頂部的註釋,解釋ID。 –

1

SELECT ISNULL(a.ID,isnull(b.ID,c.ID)) ID,coalesce(a.dt, b.dt, c.dt) , Col1, Col2, Col3 FROM set1 a FULL OUTER JOIN set2 b ON a.dt = b.dt FULL OUTER JOIN set3 c ON b.dt= c.dt