sql 一对多查询

现有2个表:
学生表:Student表(StudentId,StudentName)
成绩表:Results表(StudentId,Chinese,Math)

两表是1对多的关系,一个学生有多个成绩
问题:
显示2表的信息,用一个sql语句写出来,应该怎么写啊?

例:
学生表
StudentId StudentName
1 尹智杰
2 宋娜
3 长峰

成绩表
StudentId Subject Math
1 语文 100
1 数学 90
2 英语 85
2 物理 99
2 化学 88
2 地理 78
3 语文 99

想结果显示如下:
1 尹智杰 语文 100 数学 90
2 宋娜 英语 85 物理 99 化学 88 地理 78
3 长峰 语文 99

问题:显示每个学生的所有成绩,并且必须是一条记录显示
sql 语句应该怎样写????

交给我吧,典型的交叉查询,行列转换
select s.StudentName,
(case r.Subject when '语文' then r.Math end) as 语文,
(case r.Subject when '数学' then r.Math end) as 数学,
(case r.Subject when '英语' then r.Math end) as 英语,
(case r.Subject when '物理' then r.Math end) as 物理,
(case r.Subject when '地理' then r.Math end) as 地理
from Student s,Results r
where s.StudentId=r.StudentId

能用的话记得给分哦~追问

首先非常的感谢,科目是动态的 你这样应该是不行的吧

追答

动态的要涉及到PL/SQL的函数调用了……那就不是简单SQL语句了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-08
http://hi.baidu.com/xckouy/blog/item/acb9196b010f60e142169409.html 方法二
http://hi.baidu.com/xckouy/blog/item/59f80adb342eaec38c10293f.html
处理多行转一行,使用动态会更简单点!
--参照下列处理成绩表(可以有问题),再联合学生表查询
SELECT
B.StudentId,
LEFT(UserList,LEN(UserList)-1) as paths
FROM
(
SELECT
StudentId,
(
SELECT
Subject +',' +Math
FROM
Results
WHERE
StudentId= A.StudentId
ORDER BY
StudentId FOR XML PATH('')
) AS UserList
FROM
Results A
GROUP BY
StudentId
)
B本回答被提问者采纳
第2个回答  2011-08-08
数据库表本身设计不合理
要求的表也不合理

另外你的成绩表前后是不是不一致?
相似回答