22,209
社区成员
发帖
与我相关
我的任务
分享
create table tb(姓名 varchar(10),课程 varchar(10), 成绩 int)
insert into tb values('A','语文', 30)
insert into tb values('A','数学', 40)
insert into tb values('B','数论', 50)
insert into tb values('B','英语', 20)
insert into tb values('B','中文', 44)
insert into tb values('C','语文', 35)
go
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case px when ''' + cast(px as varchar) + ''' then 课程 else null end) ''课程'''
+ ' , max(case px when ''' + cast(px as varchar) + ''' then 成绩 else null end) ''成绩'''
from (select distinct px from (select t.* , px = (select count(1) from tb where 姓名 = t.姓名 and 课程 < t.课程) + 1 from tb t) m) as a
set @sql = @sql + ' from (select t.* , px = (select count(1) from tb where 姓名 = t.姓名 and 课程 < t.课程) + 1 from tb t)m group by 姓名'
exec(@sql)
drop table tb
/*
姓名 课程 成绩 课程 成绩 课程 成绩
---------- ---------- ----------- ---------- ----------- ---------- -----------
A 数学 40 语文 30 NULL NULL
B 数论 50 英语 20 中文 44
C 语文 35 NULL NULL NULL NULL
*/