行变列 分组排列问题,请进来帮忙看下,谢谢!

[复制链接]
查看11 | 回复8 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
/*有三个数据库表,
一个是学生表S(SNO,SNAME),字段分别表示学号,姓名;
一个是课程表C(CNO,CNAME),字段分别表示课程号,课程名称;
一个是成绩表T(SNO,CNO,SCORE),字段分别表示学号,课程号,该学生该课程成绩。
现在要实现这个表:
姓名 语文 数学 英语 物理 化学 ...
张三分数 分数 分数 分数 分数  
李四 分数 分数 分数 分数 分数
王五 分数 分数 分数 分数 分数
[ 本帖最后由 linuxroot 于 2008-1-18 09:35 编辑 ]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
有没有比较简单的办法,我现在是使用LEFT JOIN 实现的,很烦琐
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
要提供建表和原数据的脚本!
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
---参考如下的看看能不能实现
[php]
SQL> select * from h_01;
NAME
OBJ
SCORE
-------------------- ---------- ----------
student1
语文
80
student1
数学
70
student1
英语
60
student2
语文
90
student2
数学
80
student2
英语
10
已选择6行。
SQL> select name,
2 sum(decode(obj, '语文', score, null)) 语文,
3 sum(decode(obj, '数学', score, null)) 数学,
4 sum(decode(obj, '英语', score, null)) 英语
5from h_01
6 group by name;
NAME
语文 数学 英语
-------------------- ---------- ---------- ----------
student1
80 70 60
student2
90 80 10
SQL>
[/php]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
谢谢 楼上两位 已经解决
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
en...8错
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
这是最简单的行列转换,楼主问之前先google下,都是这个例子,另外把sum改成max或min,对字符串也可行,否则只有对数字可行
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
原帖由 nokilled 于 2008-1-18 09:55 发表
---参考如下的看看能不能实现
[php]
SQL> select * from h_01;
NAME
OBJ
SCORE
-------------------- ---------- ----------
student1
语文
80
student1
数学
70
student1
英语
60
student2
语文
90
student2
数学
80
student2
英语
10
已选择6行。
SQL> select name,
2 sum(decode(obj, '语文', score, null)) 语文,
3 sum(decode(obj, '数学', score, null)) 数学,
4 sum(decode(obj, '英语', score, null)) 英语
5from h_01
6 group by name;
NAME
语文 数学 英语
-------------------- ---------- ---------- ----------
student1
80 70 60
student2
90 80 10
SQL>
[/php]

11g下面这么写也行吧?电脑上没装11g...
SELECT *
FROM h_01 PIVOT ( SUM (score) FOR obj IN ( '语文'' , '数学'' , '英语'' ) )
ORDER BY 1;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836