create table hzl (name char(10),km char(10),cj int)
go
insert hzl values('张三','语文',80)
insert hzl values('张三','数学',86)
insert hzl values('张三','英语',75)
insert hzl values('李四','语文',78)
insert hzl values('李四','数学',85)
insert hzl values('李四','英语',78)
select * from hzl
declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
from (select distinct km from hzl) as a
select @sql = @sql+' from hzl group by name'
exec(@sql)drop table hzl

解决方案 »

  1.   

    create table hzl (name char(10),km char(10),cj char(10))
    go
    insert hzl values('张三','语文',80)
    insert hzl values('张三','数学',86)
    insert hzl values('张三','英语',75)
    insert hzl values('李四','语文',78)
    insert hzl values('李四','数学',85)
    insert hzl values('李四','英语',78)---------------拼装sql语句实现动态查找列名
    declare @sql varchar(8000),@tbName varchar(40)
    set @tbName = 'hzl'--这里填你的表名
    set @sql = ''
    select @sql = @sql +' union select '''+name+''' 原列名, '+name+' 值 from '+@tbName
    from (
    select a.name from syscolumns a
    join sysobjects b on a.id=b.id 
    and b.xtype='U' and b.name=@tbName
    )a
    set @sql=stuff(@sql,1,6,'')
    exec(@sql)-----------删除测试
    drop table hzl---------------结果
    原列名   值
    cj 75        
    cj 78        
    cj 80        
    cj 85        
    cj 86        
    km 数学      
    km 英语      
    km 语文      
    name 李四      
    name 张三
      

  2.   

    前台?   前台数据取出来你还不想放哪就放哪  ^_^ hehe
      

  3.   

    to:sabrina2599(猫一样的生活) 
    我的实现结果和小虾米是一样的,不过我的是动态取列名的.如果字段多的话...
      

  4.   

    呵呵,不知道了~   这种需求最好在前台实现
    --------------------------------
    是啊,这种应该在前台处理.javascript多灵活啊.数据库中放这种没意义的东西不太好