2009-11-26 115 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