★高难度行列转换 Oracle环境
问题:
表:report_val(每个同学都用不同的纪录,每个人课程都不全相同
列:name, sub, score (name和sub是主键)
张三 语文 78
张三 数学 99
张三 体育 87
.....
小红 语文 70
小红 英语 38
小红 化学 58
.....
阿晓 数学 99
阿晓 政治 90
阿晓 体育 89
阿晓 美术 98
阿晓 摄影 78
| 语文 | 数学 | 英语 | 化学 | 政治 | 体育 | 美术 | 摄影 |
------|--------|-------|--------|--------|--------|------|------|------|
张三 | 78 | 99 | | | | 87 | | |
------|--------|-------|--------|--------|--------|------|------|------|
小红 | 70 | | 38 | 58 | | | | |
------|--------|-------|--------|--------|--------|------|------|------|
阿晓 | | 99 | | | 90 | 89 | 98 | 78 |
------------------------------------
没有的就空着
列数由符合条件的记录的情况而定
不同组合的记录列数会不一样
请问该如何实现?
因为每个人的课程都不一样 而且总共有多少课程也不知道(可能会新开课程)
所以不能把表结构设计成 没门课程一个字段 而 设计成了每个人每门课程一行记录
[解决办法]
很简单,你先做一个视图,distinct列出所有人的全部课程
然后通过这个视图左连接成绩
按照课程横向crosstab就是了
如果想通过sql转向,就case when 了
[解决办法]
问这样问题,lz是没用过crosstab,
lz要尝试去用,其实并不难,搜索一下以前的帖子,有很多.而且图文并茂
[解决办法]
http://topic.csdn.net/u/20091018/15/7c6729b6-79d1-492e-862d-af9c4921f172.html?91738
[解决办法]
http://topic.csdn.net/u/20091018/15/7c6729b6-79d1-492e-862d-af9c4921f172.html?91738