请问高手,怎么样将下列的N条记录转换成一行呀,在线给分
记录如下:
eid classid studentid examid course score
jinlong 13 8133 13 english 110
jinlong 13 8133 13 chinese 120
jinlong 13 8133 13 math 130
.
.
.
我想得到如下记录:
eid classid studentid examid english chinese math ......
jinlong 13 8133 13 110 120 130 ......
主要是courseid不是固定的,这样能用一条SQL语句写出来吗?请大家帮忙了
问题点数:100、回复次数:10Top
1 楼siba(幽兰晓雨)回复于 2005-05-10 16:08:17 得分 10
用decode
select eid , classid , studentid , examid ,
max(decode(course,'english',score,NULL)),
max(decode(course,'chinese',score,NULL)),
max(decode(course,'math',score,NULL)),
....
from table
group by eid , classid , studentid , examidTop
2 楼bisliu(还在潜水的鱼)回复于 2005-05-10 18:42:56 得分 11
楼上的好像不能凑成同一个eid出一条记录吧Top
3 楼railgunman(堕落男人)回复于 2005-05-11 07:57:39 得分 22
好象用连接可以Top
4 楼liuyi8903(不让疑问伴随)回复于 2005-05-11 08:59:38 得分 22
这样的输出可以做到.不过这个需要写过程或者函数来解决这个问题.
但最好是在应用程序端来解决像这种的输出问题.Top
5 楼lovelanzhi716(仰天长啸)回复于 2005-05-11 09:56:36 得分 0
请问 liuyi8903(风继续吹)
你有这方面的实例吗?因为如果例数过多,用SQL语句效果应该会好些Top
6 楼lovelanzhi716(仰天长啸)回复于 2005-05-16 13:48:54 得分 0
请大家帮忙啊Top
7 楼zsfww1205(努力学习oracle)回复于 2005-05-16 14:26:28 得分 11
利用decode进行行列转换,你试试看,没问题的
select eid,classid,studentid,examid,
max(decode(course,'english',score,NULL)),
max(decode(course,'chinese',score,NULL)),
max(decode(course,'math',score,NULL))
from table
group by eid
Top
8 楼ipv(宁静致远)回复于 2005-05-17 13:08:03 得分 11
主要是courseid不是固定的,
就没办法了
写程序或者存储过程吧Top
9 楼lovelanzhi716(仰天长啸)回复于 2005-05-19 10:41:23 得分 0
你有这方面的存储过程吗?Top
10 楼jmbd(江米糕)回复于 2005-05-20 12:30:00 得分 13
用decode是个好办法
select studentsid,studentsname,classid,
max(decode(course,'english',score,NULL)) as english,
max(decode(course,'chinese',score,NULL)) as chinese,
max(decode(course,'math',score,NULL)) as math
from students group by studentsid,studentsname,classidTop




