求一个的SQL语句?
第一张表:Course课程表
course_id name teacher
1 语文 张三
2 数学 李四
3 外语 微微
第二张表: fenshu份数表
id swre course_id Num(学号)
1 80 1 001
2 60 2 001
3 90 3 001
4 85 1 002
5 98 2 002
要求查询结果为:
学号 语文 数学 外语
001 80 60 90
002 85 98 0
没有的课程显示0分.
[解决办法]
create table test (姓名 char(10),课程 char(10),成绩 int)
go
insert test values( '张三 ', '语文 ',80)
insert test values( '张三 ', '数学 ',86)
insert test values( '张三 ', '英语 ',75)
insert test values( '李四 ', '语文 ',78)
insert test values( '李四 ', '数学 ',85)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ',sum(case 课程 when ' ' '+rtrim(课程)+ ' ' ' then 成绩 else 0 end) [ '+rtrim(课程)+ '] '
from (select distinct 课程 from test) as a
select @sql = @sql+ ' from test group by 姓名 '
exec(@sql)
drop table test
--结果
/*
姓名 数学 英语 语文
-------------------------------
李四 85078
张三 867580
*/
[解决办法]
create table course(course_id int,name varchar(10),teacher varchar(10))
create table fenshu(id int,swre int,course_id int,num varchar(10))
insert course select 1, '语文 ', '张三 '
insert course select 2, '数学 ', '李四 '
insert course select 3, '外语 ', '微微 '
insert fenshu select 1, 80, 1, '001 '
insert fenshu select 2, 60, 2, '001 '
insert fenshu select 3, 90, 3, '001 '
insert fenshu select 4, 85, 1, '002 '
insert fenshu select 5, 98, 2, '002 '
declare @sql varchar(8000)
set @sql= 'select 学号=num, '
select @sql=@sql+b.name+ '=max(isnull(case when course_id= ' ' '+cast(b.course_id as varchar(10))+ ' ' ' then swre end,0)), '
from course b
select @sql=left(@sql,len(@sql)-1)+ ' from fenshu group by num '
exec(@sql)
drop table course,fenshu