2014-04-25 61 views
0

我有兩個查詢兩個多行數:SQL在一個查詢

select m.name, count(distinct a.kursnr) 
from trainer t 
left outer join mitarbeiter m 
on t.svnr = m.svnr 
left outer join einzeltraining e 
on t.svnr = e.trainer 
left outer join abhaltung a 
on t.svnr = a.trainer 
group by m.name, t.svnr; 

select m.name, count(e.trainer) 
from trainer t 
left outer join mitarbeiter m 
on t.svnr = m.svnr 
left outer join einzeltraining e 
on e.trainer = t.svnr 
group by m.name, e.trainer; 

第一個返回的課程正確的號碼(kursnr),第二個數字的正確數量的單個類(einzeltraining)由教練持有。但是,我無法生成一個在一個表中顯示兩個值的SQL語句。任何幫助,將不勝感激。謝謝。

+2

難道你不能只是改變第二個命令的名字,計數(e.trainer),並使用聯合一起加入結果? – Hituptony

+1

這似乎不工作,因爲值顯示在一列然後,但我想兩列。 – user3573256

+0

請將表別名添加到列 - 特別是在ON和GROUP BY子句中! –

回答

0

雖然有可能是一個更有效的方式來做到這一點,我想告訴你最簡單的方式來共享一個公共領域,如任何這兩個查詢合併:

select coalesce(q2.name, q1.name) As Name, q1.KursnrCount, q2.TrainerCount 
from 
( --original first query 
    select m.name, count(distinct a.kursnr) as KursnrCount 
    from trainer t 
    left outer join abhaltung a 
    on t.svnr = a.trainer 
    left outer join mitarbeiter m 
    on t.svnr = m.svnr 
    left outer join einzeltraining e on svnr = e.trainer 
    group by m.name, t.svnr 
) q1 
full join 
( --original second query 
    select count(e.trainer) as TrainerCount, m.name 
    from trainer t 
    left outer join einzeltraining e 
    on e.trainer = t.svnr 
    left outer join mitarbeiter m 
    on t.svnr = m.svnr 
    group by e.trainer, m.name 
) q2 on q2.name = q1.name 

你也可以使用一個內連接或左連接,而不是完全連接,具體取決於這些查詢中的名稱字段如何匹配。