mysql连接查询
我有一个以下表格的查询(简化为只显示感兴趣的列) 现在我得到的是 t3是一个独特的“时段”表 t1是唯一代码表 t2是连接二者的连接表,以及一个状态,因为这个示例status=(a,B,C) 我所做的是创建一个按“期间”分组的查询结果,并且在每个状态下都有“代码”计数 这很容易解决,但我想把它扩展到,不仅有a,B和C中的“代码”计数,还有一个与某个周期无关的代码计数,或者换句话说,在给定的周期内,不在t2中的代码计数 所以我想要的结果是mysql连接查询,sql,mysql,pivot,Sql,Mysql,Pivot,我有一个以下表格的查询(简化为只显示感兴趣的列) 现在我得到的是 t3是一个独特的“时段”表 t1是唯一代码表 t2是连接二者的连接表,以及一个状态,因为这个示例status=(a,B,C) 我所做的是创建一个按“期间”分组的查询结果,并且在每个状态下都有“代码”计数 这很容易解决,但我想把它扩展到,不仅有a,B和C中的“代码”计数,还有一个与某个周期无关的代码计数,或者换句话说,在给定的周期内,不在t2中的代码计数 所以我想要的结果是 Period A B C (Code
Period A B C (Codes from t1 not found in t2)
P1 10 5 2 3
P2 5 5 5 10
可以使用交叉联接选择所有期间的所有代码的矩阵。允许您计算不存在的行数:
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
正是我想要的。谢谢
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