日期:2014-05-17  浏览次数:20792 次

求一补全统计结果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表