假如有两个表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执行即可.
------解决方案--------------------------------------------------------
SELECT student_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'
FROM Score
GROUP BY 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 = 'SELECT student_key,' + @sql + ' FROM Score GROUP BY student_key'
EXECUTE (@sql)