2013-11-20 33 views
0

我有這三個表(Soknad,預測和DID):加入三個表與SQL Server數據庫計數

表Soknad有列:S_ID(鍵),S_REFNR

表Prognose有列: P_ID(鍵),P_S_ID

表的所作所爲列:D_ID(鍵),D_S_ID,Did_Something

Prognose.P_S_ID是外鍵Soknad.S_ID。 Did.D_S_ID是Soknad.S_ID的外鍵。

的表是這樣的:

SOKNAD

S_ID | S_REFNR | 
    1 | abc  | 
    2 | cbc  | 
    3 | sdf  | 

PROGNOSE

P_ID | P_S_ID | 
    10 | 1  | 
    11 | 2  | 

DID

D_ID | D_S_ID | D_Did_Something | 
    100 | 1  | 1    | 
    101 | 1  | 1    | 
    102 | 1  | 0    | 
    103 | 2  | 1    | 
    104 | 2  | 1    | 

我想加入這些表(如查看或選擇聲明)。在Did表中,應該返回Did_Something列的計數,以及值爲1(1)的同一列的計數。 結果應該是:

S_ID | S_REFNR | P_ID | Count_D_Did_Something | Count_D_Did_Something_Is_One | 
1 | abc  | 10 | 3      | 2       | 
2 | cbc  | 11 | 2      | 2       | 
3 | sdf  |  |      |        | 

任何幫助將不勝感激!

+0

哪個平臺? (或者你使用非mysql)? – Hogan

回答

0

在這裏你去:

select s.s_id, 
     p.p_id, 
     count(d.Did_Something) as Count_D_Did_Something, -- nulls won't be counted 
     sum(CASE WHEN d.Did_Something = 1 THEN 1 ELSE 0 END) as Count_D_Did_Something_is_one 
from Soknad as s 
     left join Prognose as p on p.P_S_ID = s.s_id 
     left join Did as d on d.D_S_ID = s.s_id 
+0

謝謝,我在最後加上了s.s_id組,p.p_id,然後工作。 – Batar

1

我相信你想要做的就是加入兩個表,並把行數與左表分別放在每個表的不同列中。

這將實現這一目標。

select t1.id, count(t2.id) t2_count , count(t3.id) t3_count 
from table1 as t1 
     left outer join table2 as t2 on t2.table1_id = t1.id 
     left outer join table3 as t3 on t3.table1_id = t1.id 
group by t1.id; 

爲了實現基於標準從外連接表的一個你想要的數量,你可以做,這樣一來,使用派生的表...

select t1.id, count(t2.id) t2_count, count(tt2.mCount) Did_SomethingCount, count(t3.id) t3_count 
from table1 as t1 
     left outer join table2 as t2 on t2.table1_id = t1.id 
     left outer join (select count(*), table1_id mCount from table2 where Did_Something = 1 group by table1_id) as tt2 on tt2.table1_id = t1.id 
     left outer join table3 as t3 on t3.table1_id = t1.id 
group by t1.id; 
0

這應該只是給你需要的結果。請注意,我只是簡單總結一下當你想要數值爲1時,

SELECT S.S_ID, S.REFNR, P.P_ID, COUNT(D.D_DID_SOMETHING) AS COUNT_D_DID_SOMETHING, 
SUM(D_DID_SOMETHING) AS COUNT_D_DID_SOMETHING_IS_ONE 
FROM SOKNAD AS S 
INNER JOIN PROGNOSE AS P 
ON P.P_S_ID = S.S_ID 
INNER JOIN DID AS D 
ON D.D_S_ID = S.S_ID 
GROUP BY S.S_ID, S.REFNR, P.P_ID