用case  when 语句,自己查查帮助写吧

解决方案 »

  1.   

    /*范例表
    create table 表1 (
    號數 char(10), 
    成績 integer, 
    科目 char(10) ) 
    insert into 表1 select '1',60,'数学' 
    union select '1',43,'物理' 
    union select '1',100,'语文' 
    union select '2',87,'语文' 
    union select '2',99,'数学' 
    union select '2',89,'物理' 
    union select '2',87,'语文' 
    */
    Create procedure RowToColumn
      @Table varchar(30),          --表名
      @MasterField varchar(30),--待转名称列名 char字段
      @SlaveField varchar(30),--待转数据列名 int型字段
      @GroupID varchar(30)--分组ID
      as
    --调用方法 RowToColumn '表1','科目','成績','號數'
    --by jinjazz  环境 SQLServer2000
    begin
      DECLARE @mSQL VARCHAR(8000)
        set @msql = 'DECLARE @SQL VARCHAR(8000)'
        set @msql = @msql + ' set @SQL= ''select ' + @GroupID + ''''
        set @msql = @msql + ' SELECT @SQL= @SQL+'',max(CASE WHEN ' +
        @MasterField + '=''''''+' + @MasterField + '+'''''' then  ' + @SlaveField +
          ' else 0 end )[''+' + @MasterField + '+'']'' from(select distinct ' +
          @MasterField + ' from ' + @Table + ') a'
        set @msql = @msql + ' SET @SQL=@SQL+ '' from ' + @Table + ' group by ' +
          @GroupID + ''''
        set @msql = @msql + ' exec(@SQL)'
        exec(@msql)
    end
    反过来,列转行就简单了..直接union即可
    create table tt (color char(10),   S integer,   M  integer,  L integer)
    insert into tt 
    select  'RED',     0 ,  2,   3
    union select 
      'WHI',     1,   1,   2
    union select 
      'BLK',     3,   3,   2select * from ttselect color,size='s',qty=s from tt
    union
    select color,size='m',qty=m from tt
    union
    select color,size='l',qty=l from tt
    order by colordrop table tt
      

  2.   

    行变列
    http://community.csdn.net/Expert/topic/4324/4324734.xml?temp=.5537836