日期:2014-05-18  浏览次数:20485 次

40分求如下要求一条select语句!
全部分数求下面语句!结贴有分在加!
如下表:

学生表:
--------------
学号           姓名
01               张三
02               李四

成绩表:
-------------
学号         得分         课程代号
01             85               101
01             98               102
02             88               101
02             89               102

课程表:
--------------------
课程代号         课程名称
101                     语文
102                     数学

求一条语句或存储过程,实现的结果如下:
姓名           语文       数学
张三             85           98
李四             88           89

一直困脑我的一个问题,是我太笨还是实现有点难度啊?


------解决方案--------------------
-- 创建表
create table S(学号 varchar(10),姓名 nvarchar(20))
Go
create table C(课程代号 int,课程名称 nvarchar(20))
Go
create table T(学号 varchar(10),得分 int,课程代号 int)
Go
-- 插入测试数据
insert C select '101 ', '语文 '
insert C select '102 ', '数学 '
Go
insert S select '01 ', '张三 '
insert S select '02 ', '李四 '
Go
insert T select '01 ',85,101
insert T select '01 ',98,102
insert T select '02 ',85,101
insert T select '02 ',98,102
Go
-- 查询
declare @sql varchar(4000)
set @sql= ' '
select @sql=@sql+ ',max(case 课程代号 when '+cast(C.课程代号 as varchar(10))+ ' then 得分 end) as '+C.课程名称+ ' ' from C
exec( 'select 学号 '+@sql+ ' from T group by 学号 ')
Go
-- 结果
学号 语文 数学
---------- ----------- -----------
01 85 98
02 85 98
------解决方案--------------------
create table 学生表(学号 varchar(10), 姓名 varchar(10))
insert 学生表 select '01 ', '张三 '
union all select '02 ', '李四 '

create table 成绩表(学号 varchar(10), 得分 int, 课程代号 int)
insert 成绩表 select '01 ', 85, 101
union all select '01 ', 98, 102
union all select '02 ', 88, 101
union all select '02 ', 89, 102

create table 课程表(课程代号 varchar(10), 课程名称 varchar(10))
insert 课程表 select '101 ', '语文 '
union all select '102 ', '数学 '


declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ ', '+quotename(课程名称)+ '=max(case when 课程代号= '+quotename(课程代号, ' ' ' ')+ ' then 得分 else 0 end) '
from 课程表
select @sql= 'select 学生表.姓名 '+@sql+ '
from 成绩表
left join 学生表 on 成绩表.学号=学生表.学号 group by 学生表.学号, 学生表.姓名 '
exec(@sql)

--result
姓名 语文 数学
---------- ----------- -----------
李四