读书人

请问一个sql语句

发布时间: 2012-01-21 21:31:43 作者: rapoo

请教一个sql语句
假如有两个表Tstudent和Tcourse表结果分别如下
Tstudent表:id sid sname
1 001 张三
2 002 李四

Tcourse表 id sid course
1 001 语文
2 002 语文
3 001 数学
4 001 英语

现在我要查出每个学生所学的学科有哪些,并显示出来的结果形式如下:
学号 姓名 所学课程
001 张三 语文 数学 英语
002 李四 语文

请问这样SQL语句要怎么写呢,先谢谢了!

[解决办法]
大概是使用case when then else end将行转化为列,循环你的Tcourse表,生成sql语句.
用execute执行即可.
[解决办法]
SELECTstudent_key,
SUM(CASE course_key WHEN 1 THEN mark else 0 end) AS 'English',
SUM(CASE course_key WHEN 2 THEN mark else 0 end) AS 'Maths',
SUM(CASE course_key WHEN 3 THEN mark else 0 end) AS 'Physics'
FROMScore
GROUPBY student_key

DECLARE @sql VARCHAR(1024)
SET@sql = ''
SELECT@sql = @sql + 'SUM(CASE course_key WHEN ' + CAST(course_key AS VARCHAR) + ' THEN mark else 0 end)' + ','
FROM(SELECT DISTINCT course_key FROM Score) AS obj
SELECT@sql = LEFT(@sql, LEN(@sql) - 1)
SET@sql = 'SELECTstudent_key,' + @sql + ' FROMScore GROUPBY student_key'
EXECUTE (@sql)

读书人网 >.NET

热点推荐