有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希望得到的结果为所有人所有类型数据结果加和的列表,列表中是展现出人员和类型对应的数据结果表中的数据列加和
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希望得到的结果为所有人所有类型数据结果加和的列表,列表中是展现出人员和类型对应的数据结果表中的数据列加和
解决方案 »
- oracle视图的undefined类型列与表进行合并的问题?
- 怎么编写触发器?
- Oracle查询问题求助
- 在存储过程里,Select一条记录的一列值into一个变量,但那条记录不存在,报“ORA-01403:未找到数据”,怎么解决的?
- 关于PB6.5移植pb8.0问题后连接数据库的问题
- 江湖救急,问题很少见!关于一个merge语句?帮忙up有分,谢谢了!
- 我登陆到oracle Management Server上时怎么老是登陆身份不正确啊!?初学,多谢!
- 寻求有关提高SQL执行效率的文章或书籍
- 我机器上连接oracle过一会就会停掉,是什么原因?
- oracle用户被删除后 plsql 仍可以用该用户连接
- 自定义函数编译报ora-00942错误
- 使用数据泵导入,不兼容问题
from t1,t2,t3
where t1.typeid=t2.typeid
and t2.personid=t3.personid
group by t3.personname,t1.typename;
from t1,t2,t3
where t1.typeid=t2.typeid
and t2.personid=t3.personid
group by t3.personname,t1.typename;
from t1
left join persion t3 on t3.personid=t1.personid
left join type t2 on t2.typeid=t1.typeid
group by t2.typename
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
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表
SQL> select t4.personname, t4.typename, nvl(sum(score), 0)
2 from (select t3.*, t1.* from t3, t1) t4
3 left join t2
4 on t2.typeid = t4.typeid
5 and t2.personid = t4.personid
6 group by t4.personname, t4.typename
7 order by 1;
PERSONNAME TYPENAME NVL(SUM(SCORE),0)
-------------------- ---------- -----------------
李四 a 10
李四 b 30
李四 c 0
王五 a 20
王五 b 0
王五 c 0
张三 a 10
张三 b 10
张三 c 70
FROM (SELECT NVL(T2.typeid, T.typeid) AS typeid,
NVL(T2.personid, T.personid) AS personid,
NVL(T2.score, 0) AS score
FROM T2
FULL JOIN (SELECT T1.typeid, T2.personid
FROM T1
FULL JOIN T2 ON 1 = 1
MINUS
SELECT T2.typeid, T2.personid FROM T2) T ON T2.typeid =
T.typeid
AND T2.personid =
T.personid) T
LEFT JOIN T1 ON T.typeid = T1.typeid
LEFT JOIN T3 ON T.personid = T3.personid
GROUP BY T3.personname, T1.typename
ORDER BY T3.personname, T1.typename