2013-12-23 20 views
0

這是醜陋的實現:工會一些兩場表到一個多場與第一場關鍵

select [keyfield] 
    , (MAX([f1])) as f1 
    , (MAX([f2])) as f2 
    , (MAX([f3])) as f3 
    , (MAX([f4])) as f4 
    , (MAX([f5])) as f5 

from (
    select [keyfield] 
     , [f1] 
     , Null as f2 
     , Null as f3 
     , Null as f4 
     , Null as f5 
    from t1 

    UNION ALL 

    select [keyfield] 
     , Null as f1 
     , [f2] 
     , Null as f3 
     , Null as f4 
     , Null as f5 
    from t2 

    UNION ALL 

    ... 
    ) subquery 
    group by subquery.[keyfield] 

有沒有做同樣的其他方式?

+0

首先,你可以解決你的問題,你想做些什麼?你有六桌嗎? – PeterRing

+0

@PeterRing是的,我有5個2字段的表,並且想要得到一個6字段 – Cynede

+0

好吧,那麼:你能描述表格,屬性等等,他們有什麼聯繫以及你想要什麼樣的解決方案? – PeterRing

回答

1

我覺得跟加入:

select [keyfield] 
    , (MAX([t1.f1])) as f1 
    , (MAX([t2.f2])) as f2 
    , (MAX([t3.f3])) as f3 
    , (MAX([t4.f4])) as f4 
    , (MAX([t5.f5])) as f5 

from t1 
Join t2 on t2.keyfield = t1.keyfield 
Join t3 on t3.keyfield = t1.keyfield 
Join t4 on t4.keyfield = t1.keyfield 
Join t5 on t5.keyfield = t1.keyfield 
Group by t1.keyfield 
+0

這隻適用於如果每個表都有當然,至少有一行(希望它有效,但)。理想情況下,多重性也是1:1,因此您不需要「GROUP BY」並進行聚合。 –