sql server 纵表转横表

来源:互联网 发布:github for mac ssh 编辑:程序博客网 时间:2024/05/16 17:21

原帖地址:http://blog.csdn.net/kong2005/archive/2010/06/24/5692023.aspx

 

演示如下:

1.建表:

create table tb
(
   Name    varchar(10) ,
   Subject varchar(10) ,
   Result  int
)

2.插入数据:
insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)

3.纵表转横表,静态方式:
select name 姓名,
  max(case subject when '语文' then result else 0 end) 语文,
  max(case subject when '数学' then result else 0 end) 数学,
  max(case subject when '物理' then result else 0 end) 物理
from tb
group by name
3.纵表转横表,动态方式:
declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else null end) [' + Subject + ']'
from (select distinct Subject from tb) as a
print(@sql)
set @sql = @sql + ' from tb group by name'
exec(@sql)
--print(@sql)

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kong2005/archive/2010/06/24/5692023.aspx

原创粉丝点击