当前位置: 代码迷 >> Sql Server >> 求SQL语句 内容如下 难度不小,牛B的来,该如何解决
  详细解决方案

求SQL语句 内容如下 难度不小,牛B的来,该如何解决

热度:6   发布时间:2016-04-27 15:27:27.0
求SQL语句 内容如下 难度不小,牛B的来
先说一下我的数据库
表 学生成绩:
学号 姓名 课程名称 成绩 班级编号 学期
001 李一 数学 99 101 1
001 李一 语文 100 101 1
001 李一 英语 80 101 1
001 李一 数学 99 101 2
001 李一 语文 100 101 2
001 李一 英语 80 101 2


要求用一SQL语句生成以下表:

学号 姓名 学期 课程1 成绩1 课程2 成绩2 课程3 成绩3 班级编号
001 李一 1 数学 99 语文 100 英语 80 101
001 李一 2 数学 99 语文 100 英语 80 101



要求完整的SQL语句 MSSQL 2005 100分作为酬劳



------解决方案--------------------
SQL code
create table tb(学号 varchar(10),姓名 varchar(10),课程名称 varchar(10),成绩 int,班级编号 int,学期 int)insert into tb values('001','李一','数学',       99  ,    101,       1) insert into tb values('001','李一','语文',       100 ,    101,       1) insert into tb values('001','李一','英语',       80  ,    101,       1) insert into tb values('001','李一','数学',       99  ,    101,       2) insert into tb values('001','李一','语文',       100 ,    101,       2) insert into tb values('001','李一','英语',       80  ,    101,       2)godeclare @sql varchar(8000)set @sql = 'select 学号,姓名,学期'select @sql = @sql + ' , max(case px when ''' + cast(px as varchar) + ''' then 课程名称 else '' '' end) [课程' + cast(px as varchar) + ']'                   + ' , max(case px when ''' + cast(px as varchar) + ''' then 成绩 else 0 end) [成绩' + cast(px as varchar) + ']'from (select distinct px from (select px=(select count(1) from tb where 学号=a.学号 and 姓名=a.姓名 and 学期 = a.学期 and 班级编号=a.班级编号 and 成绩<a.成绩)+1 , * from tb a) t) as aset @sql = @sql + ',班级编号 from (select px=(select count(1) from tb where 学号=a.学号 and 姓名=a.姓名 and 学期 = a.学期 and 班级编号=a.班级编号 and 成绩<a.成绩)+1 , * from tb a) t group by 学号,姓名,学期,班级编号'exec(@sql) drop table tb/*学号  姓名  学期  课程1  成绩1  课程2 成绩2  课程3 成绩3 班级编号        ---- ---- ----  ----  ----  ----- ----- ----- ---- ----------- 001  李一   1    英语   80    数学   99    语文  100  101001  李一   2    英语   80    数学   99    语文  100  101*/
------解决方案--------------------
SQL code
DECLARE @T TABLE(XH INT,NAME VARCHAR(20),KC VARCHAR(20),CJ INT,BJBH INT,XQ INT)INSERT INTO @TSELECT 001   ,'李一'    ,'数学',       99,      101,       1 UNION ALL SELECT 001,   '李一',    '语文',       100,     101,       1 UNION ALL SELECT 001,   '李一',    '英语',       80,      101,       1 UNION ALL SELECT 001,   '李一',    '数学',       99,      101,       2 UNION ALL SELECT 001,   '李一',    '语文',       100,     101,       2 UNION ALL SELECT 001,   '李一',    '英语',       80,      101,       2 SELECT XH,NAME,XQ,KC1='数学',MAX(CASE WHEN KC='数学' THEN CJ END) CJ1,        KC2='语文',MAX(CASE WHEN KC='语文' THEN CJ END) CJ2,        KC3='英语',MAX(CASE WHEN KC='英语' THEN CJ END) CJ3,BJBH FROM @T GROUP BY XQ,XH,NAME,BJBH
------解决方案--------------------
SQL code
DECLARE @T TABLE(学号 varchar(10),姓名 varchar(10),课程名称 varchar(10),成绩 int,班级编号 int,学期 int)INSERT INTO @TSELECT 001   ,'李一'    ,'数学',       99,      101,       1 UNION ALL SELECT 001,   '李一',    '语文',       100,     101,       1 UNION ALL SELECT 001,   '李一',    '英语',       80,      101,       1 UNION ALL SELECT 001,   '李一',    '数学',       99,      101,       2 UNION ALL SELECT 001,   '李一',    '语文',       100,     101,       2 UNION ALL SELECT 001,   '李一',    '英语',       80,      101,       2 select 学号,姓名,学期,课程名称='数学',成绩=max(case when 课程名称='数学' then 成绩 end),课程名称='s v
  相关解决方案