日期:2014-05-18 浏览次数:20488 次
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)
go
declare @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 a
set @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  101
001  李一   2    英语   80    数学   99    语文  100  101
*/
------解决方案--------------------
DECLARE @T TABLE(XH INT,NAME VARCHAR(20),KC VARCHAR(20),CJ INT,BJBH INT,XQ INT)
INSERT INTO @T
SELECT 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
------解决方案--------------------
DECLARE @T TABLE(学号 varchar(10),姓名 varchar(10),课程名称 varchar(10),成绩 int,班级编号 int,学期 int)
INSERT INTO @T
SELECT 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