create table A(
科目 varchar(50),
分数 int,
姓名编号 varchar(50)
)
go
insert A select '数学',50,'001'
union select '化学',90,'001'
union select '英语',40,'001'
union select '语文',20,'001'
union select '物理',80,'001'
union select '化学',90,'002'
union select '英语',40,'002'
union select '语文',20,'002'
union select '物理',80,'002'
DECLARE @SQL varchar(8000)
set @SQL=''
select @SQL=@SQL + ' sum(case when 科目=''' + 科目 + ''' then 分数 else 0 end) as ' + 科目 +',' from (select distinct 科目 from A) T
set @SQL='select 姓名编号,' + left(@SQL,len(@SQL)-1) + ' from a group by 姓名编号'
exec (@SQL)
科目 varchar(50),
分数 int,
姓名编号 varchar(50)
)
go
insert A select '数学',50,'001'
union select '化学',90,'001'
union select '英语',40,'001'
union select '语文',20,'001'
union select '物理',80,'001'
union select '化学',90,'002'
union select '英语',40,'002'
union select '语文',20,'002'
union select '物理',80,'002'
DECLARE @SQL varchar(8000)
set @SQL=''
select @SQL=@SQL + ' sum(case when 科目=''' + 科目 + ''' then 分数 else 0 end) as ' + 科目 +',' from (select distinct 科目 from A) T
set @SQL='select 姓名编号,' + left(@SQL,len(@SQL)-1) + ' from a group by 姓名编号'
exec (@SQL)
科目 varchar(50),
分数 int,
姓名编号 varchar(50)
)
go
create table B(
姓名编号 varchar(800),
姓名 varchar(80)
)
go
insert B select '001','A'
union select '002','B'
go
insert A select '数学',50,'001'
union select '化学',90,'001'
union select '英语',40,'001'
union select '语文',20,'001'
union select '物理',80,'001'
union select '化学',90,'002'
union select '英语',40,'002'
union select '语文',20,'002'
union select '物理',80,'002'
DECLARE @SQL varchar(8000)
set @SQL=''
select @SQL=@SQL + ' sum(case when 科目=''' + 科目 + ''' then 分数 else 0 end) as ' + 科目 +',' from (select distinct 科目 from A) T
set @SQL='select B.姓名 ,t.* from B left join (select 姓名编号,' + left(@SQL,len(@SQL)-1) + ' from a group by 姓名编号)t on b.姓名编号=t.姓名编号'
exec (@SQL)
on 表1.姓名编号=表2.姓名编号
sum(case when b.科目='数学' then b.分数 else 0 end) as 数学,
sum(case when b.科目='英语' then b.分数 else 0 end) as 英语
from tb1 a inner join tb2 b on a.姓名编号=b.姓名编号 group by a.姓名
已经测试,一切ok!
set @SQL=''
select @SQL=@SQL + ' sum(case when 科目=''' + 科目 + ''' then 分数 else 0 end) as ' + 科目 +',' from (select distinct 科目 from A) T
set @SQL='select 姓名编号,' + left(@SQL,len(@SQL)-1) + ' from a group by 姓名编号'