2009-11-26 153 views
0

我有一個查詢與下表(減少顯示只有感興趣的列)。mysql連接查詢

t1 
code 

t2 
code, period, status 

t3 
period, desc 

現在我有的是,

T3是獨特的 「週期」 的表。

t1是唯一代碼表。

t2是鏈接在一起的連接表,以及狀態,爲了舉例,狀態=(A,B,C)。

我正在做的是創建一個查詢結果,按「期間」分組,並在每個狀態中計數「代碼」。

這很容易解決,但是我想要擴展它,不僅需要計算A,B和C中的'代碼數,還要計算與期間無關的代碼數或者換言之,對於給定的時間段,不在t2中的代碼的計數。

所以我要尋找的結果是

Period A B C (Codes from t1 not found in t2) 
P1  10 5 2 3 
P2  5 5 5 10 

回答

1

您可以使用交叉連接來選擇所有時段所有代碼的矩陣。這使您可以計算不存在的行:

select 
    sum(case when t2.status is 'A' then 1 else 0 end) as ACount, 
    sum(case when t2.status is 'B' then 1 else 0 end) as BCount, 
    ... 
    sum(case when t2.code is null then 1 else 0 end) as NotPresentCount 
from  t1 
cross join t3 
left join t2 
on   t2.code = t1.code and t2.period = t3.period 
group by t3.period 
+0

正好想要我以後。謝謝。 – kaylnn 2009-11-26 05:32:37