求一补全统计结果sql
有t1表为类型表
typeid typename
1 a
2 b
3 c
有t2表为类型人员数据表
typeid personid score
1 1 10
2 1 20
3 1 30
3 1 20
3 1 10
1 2 10
2 2 30
1 3 20
有t3表为人员表
personid personname
1 张三
2 李四
3 王五
希望得到如下统计结果
personname typename score
张三 a 10
张三 b 20
张三 c 60
李四 a 10
李四 b 30
李四 c 0
王五 a 20
王五 b 0
王五 c 0
希望得到的结果为所有人所有类型数据结果加和的列表,列表中是展现出人员和类型对应的数据结果表中的数据列加和
------解决方案--------------------没仔细看,应该是这个
select t4.personname, t4.typename, nvl(sum(score), 0)
from (select t3.*, t1.* from t3, t1) t4
left join t2
on t2.typeid = t4.typeid
and t2.personid = t4.personid
group by t4.personname, t4.typename
order by 1
------解决方案--------------------SELECT MAX(T.PERSONNAME), MAX(T.TYPENAME), SUM(NVL(T2.SCORE, 0))
FROM (SELECT * FROM T1 T1, T3 T3) T
LEFT JOIN T2 T2 ON T.PERSONID = T2.PERSONID
AND T.TYPEID = T2.TYPEID
GROUP BY T.PERSONID, T.TYPEID
ORDER BY T.PERSONID, T.TYPEID
先把t1,t3表都列出来再左连接计算t2表