日期:2014-05-18 浏览次数:20363 次
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