標準行列轉換問題
http://blog.csdn.net/talantlee/articles/353798.aspx

解决方案 »

  1.   

    select
        姓名,
        维修=sum(case 类型 when '维修' then 1 else 0 end),
        新装=sum(case 类型 when '新装' then 1 else 0 end),
        好  =sum(case 评价 when '好'   then 1 else 0 end),
        差  =sum(case 评价 when '差'   then 1 else 0 end),
        一般=sum(case 评价 when '一般' then 1 else 0 end)
    from
        表1
    group by
        姓名
      

  2.   

    declare @s nvarchar(4000)
    set @s=''
    select @s=@s+','+姓名  
    +'=isnull(rtrim(max(case   when 姓名= ' 
     + QUOTENAME(姓名,'''')
     +' then  类型  end)),0)'from 表1 group by 姓名
    exec('select 姓名'+@s+' from 表1 group by 姓名)
      

  3.   

    select 姓名,sum(case 类型 when 维修 then 1 else 0 end)as 维修
    ,sum(case 类型 when 新装 then 1 else 0 end)as 新装
    ,sum(case 评价 when 好 then 1 else 0 end)as 好
    ,sum(case 评价 when 差 then 1 else 0 end)as 差
    ,sum(case 评价 when 一般 then 1 else 0 end)as 一般
    group by 姓名
      

  4.   

    看来还是晚了,那就做个全一点的吧
    declare @tt table(序号 int,姓名 varchar(8),类型 varchar(4),评价 varchar(4))
    insert @tt values(1,'aaa','维修','好')
    insert @tt values(2,'bbb','维修','差')
    insert @tt values(3,'ccc','新装','好')
    insert @tt values(4,'bbb','新装','好')
    insert @tt values(5,'aaa','维修','一般')
    select 姓名,sum(case 类型 when '维修' then 1 else 0 end)as 维修
    ,sum(case 类型 when '新装' then 1 else 0 end)as 新装
    ,sum(case 评价 when '好' then 1 else 0 end)as 好
    ,sum(case 评价 when '差' then 1 else 0 end)as 差
    ,sum(case 评价 when '一般' then 1 else 0 end)as 一般
    from @tt
    group by 姓名
      

  5.   

    create table #tbl(序号 int,姓名 varchar(10),类型 varchar(4),评价 varchar(4))insert #tbl values(1,'aaa','维修','好')
    insert #tbl values(1,'bbb','维修','差')
    insert #tbl values(1,'ccc','新装','好')
    insert #tbl values(1,'bbb','新装','好')
    insert #tbl values(1,'aaa','维修','一般')declare @sqll varchar(4000)
    declare @sql varchar(4000)
    set @sql='select 姓名,'
    set @sqll=''
    select @sql= @sql+ '''' + a.类型 + '''=sum(case when 类型=''' + a.类型 + '''then 1 else 0 end),' from (select distinct 类型 from #tbl) aselect @sqll= @sqll + '''' + a.评价 +'''=sum(case when 评价=''' +a.评价 + ''' then 1 else 0 end),' from (select distinct 评价 from #tbl) a
    select @sql=@sql+left(@sqll,len(@sqll)-1) +' from #tbl group by 姓名'
    exec (@sql)--结果
    姓名         维修          新装          差           好           一般          
    ---------- ----------- ----------- ----------- ----------- ----------- 
    aaa        2           0           0           1           1
    bbb        1           1           1           1           0
    ccc        0           1           0           1           0