求一SQL语句,有点困难,高手帮啊。。。。
有两个表分别是:
课程表 course
字段为:
课程号 cno
课程名 cname
任课教师 tno
成绩表 SC
字段为:
学生号 sno
课程号 cno
成绩 grade
现要查询学生的所有课程成绩
如
SNO Math English
2 76 78
其中课程名称读自课程表
------解决方案--------------------Declare @sql varchar(8000)
set @sql = 'select sno '
select @sql = @sql + ',(case cno when ' ' '+cno+ ' ' ' then grade else ' ' ' 'end) [ '+cname+ '] '
from (select distinct cno,cname from course) as a
Select @sql = @sql+ ' from SC '
exec(@sql)
------解决方案--------------------create table course(cno int, cname varchar(20), tno int)
insert course select 1, 'Math ', 11
insert course select 2, 'English ', 12
insert course select 3, 'History ', 13
go
create table sc(sno int, cno int, grade int)
insert sc select 2, 1, 76
insert sc select 2, 2, 78
go
declare @sql varchar(8000)
set @sql= 'select sno, '
select @sql=@sql+quotename(cname)+ '=max(case when cno= ' ' '+rtrim(cno)+ ' ' ' then grade end), '
from course
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from sc group by sno '
exec(@sql)
--result
sno Math English History
----------- ----------- ----------- -----------
2 76 78 NULL
------解决方案-----------------------try
declare @sql varchar(8000)
set @sql= 'select sno, '
select @sql=@sql+ 'sum(case when cno= ' ' ' +rtrim(cno)+ ' ' 'then grade else 0 end) as ' ' '+rtrim(cname)+ ' ' ', ' from course
print @sql
select @sql=left(@sql,len(@sql)-1)
exec(@sql+ 'from sc group by sno ')
sno Math English History
----------- ----------- ----------- -----------
2 76 78 0
------解决方案--------------------从静态开始吧
所谓的动态也就是生成一个动态的课程名,如下:
select sno,
[math]=max(case cno when 'math对应的id ' else 0 end),
[English]=max(case cno when 'English对应的id ' else 0 end)
from SC group by sno
------解决方案--------------------没有给条件赋值grade
select sno,
[math]=max(case cno when 'math对应的id ' then grade else 0 end),
[English]=max(case cno when 'English对应的id ' then grade else 0 end)
from SC group by sno