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
姓名 语文 数学
---------- ----------- -----------
李四