一个sql查询

来源:百度知道 编辑:UC知道 时间:2024/07/02 11:07:58
一张表有3个字段,姓名有若干,科目有8个,每人每科都有成绩
姓名 科目 成绩
张山 语文 94
李四 数学 87
…… …… ……

想查询出来 这样一张表 每人一行显示姓名 和8科每科的成绩
姓名 语文 数学 英语…… 政治
张山 94 95 90 …… 100
李四 …… …… …… …… ……
……

请教sql怎么写,不要一次只能提出一个字段,最好是一下都能出来
要是写成存储过程怎么写 (数据库是oracle)
好帖加分

oracle写法:
(无需存储过程,一个SQL搞定)

select 姓名,
sum(decode(科目,'语文',成绩,null)) "语文",
sum(decode(科目,'数学',成绩,null)) "数学",
sum(decode(科目,'英语',成绩,null)) "英语",
...
sum(decode(科目,'政治',成绩,null)) "政治",
from table group by 姓名

SQL Server存储过程可以这样写:
declare @sql varchar(5000)
select @sql = isnull(@sql + '],[' , '') + 科目 from sc group by 科目
set @sql = '[' + @sql + ']'
print @sql
exec ('select * from (select * from sc) a pivot (max(成绩) for 科目 in (' + @sql + ')) b')
实际上是一个行列转换的问题,关于Oracle的你可以写写看看

select 语文分数;数学分数;英语分数。。。。 from 成绩表 inner join 信息表 on 成绩表.stuId=信息表.StuId group by信息表.StuId 不懂问我

不明白你到底要的是什么,好象你要的有三个吧。