当前位置: 代码迷 >> Delphi >> 请问一个sql语句
  详细解决方案

请问一个sql语句

热度:7010   发布时间:2013-02-25 00:00:00.0
请教一个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执行即可.
------解决方案--------------------------------------------------------
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)
  相关解决方案