【方法】
declare @sql nvarchar(4000)
set @sql = 'select 竖排分类 as ' + '别名'
select @sql = @sql + ' , max(case 横排分类 when ''' + 横排分类 + ''' then 统计内容 else 0 end) [' + 横排分类 + ']'
from (select distinct 横排分类 from 表 where 条件语句) as a
set @sql = @sql + ' from 表 where 条件语句 group by 竖排分类 '
exec(@sql)
【实例】
原始表:
Name Subject Result
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
欲转换效果:
姓名 数学 物理 语文 平均分 总分
--------------------------------------------------------------------------
李四 84 94 74 84.00 252
张三 83 93 74 83.33 250
实现代码:
declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' , cast(avg(result*1.0) as decimal(18,2)) 平均分,sum(result) 总分 from tb group by name'
exec(@sql)
理论基础:http://blog.sina.com.cn/s/blog_40ac71670100b26h.html
declare @sql nvarchar(4000)
set @sql = 'select 竖排分类 as ' + '别名'
select @sql = @sql + ' , max(case 横排分类 when ''' + 横排分类 + ''' then 统计内容 else 0 end) [' + 横排分类 + ']'
from (select distinct 横排分类 from 表 where 条件语句) as a
set @sql = @sql + ' from 表 where 条件语句 group by 竖排分类 '
exec(@sql)
【实例】
原始表:
Name Subject Result
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
欲转换效果:
姓名 数学 物理 语文 平均分 总分
--------------------------------------------------------------------------
李四 84 94 74 84.00 252
张三 83 93 74 83.33 250
实现代码:
declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' , cast(avg(result*1.0) as decimal(18,2)) 平均分,sum(result) 总分 from tb group by name'
exec(@sql)
理论基础:http://blog.sina.com.cn/s/blog_40ac71670100b26h.html