111,120
社区成员
发帖
与我相关
我的任务
分享
--临时表对应实体表
--#A Student
--#B Score
--#C Subject
declare @sql varchar(8000)
set @sql='select max(name) Name'
select @sql=@sql+','+c.subname+'=max(case subname when '''+c.subname+''' then score end)'
from #C c
set @sql=@sql+' from (select a.name,b.score,c.subname from #A a left join #B b on a.stuid=b.stuid inner join #C c on b.subid=c.subid) A group by name'
exec (@sql)
/*Result:
姓名 语文 数学
-------------------------------------------------- ----------- -----------
李四 80 NULL
张三 86 92
*/
--#A Student
--#B Score
--#C Subject
select 姓名=max(name),语文=max(case subname when '语文' then score end),数学=max(case subname when '数学' then score end) from (select a.name,b.score,c.subname from #A a left join #B b on a.stuid=b.stuid inner join #C c on b.subid=c.subid) A group by name
/*
姓名 语文 数学
-------------------------------------------------- ----------- -----------
李四 80 NULL
张三 86 92
*/
select 姓名 姓名,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
from tb
group by 姓名