列轉行

create table tb(name varchar(10),subject varchar(10),mark int)

insert into tb values('A',         '語文',      80)
insert into tb values('A',         '數學',      80)
insert into tb values('A',         '外語',      80 )
insert into tb values('B',         '數學',      80)
insert into tb values('B',         '外語',      80)
insert into tb values('C',         '語文',      78)

select name ,
  max(case subject when '語文' then mark else 0 end) '語文',
  max(case subject when '數學' then mark else 0 end) '數學',
  max(case subject when '外語' then mark else 0 end) '外語',
  sum(mark)/(select max(cnt) cnt from (select name , count(*) cnt from tb group by name) t) [avg]
from tb
group by name

declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , sum(case Subject when ''' + Subject + ''' then mark else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' ,sum(mark)/(select max(cnt) cnt from (select name , count(*) cnt from tb group by name) t) [avg] from tb group by name'
exec(@sql) 
相關文章
相關標籤/搜索