行列转换问题进阶篇
表table1 
          id      name      itemName   scores 
             1         张三         语文            80 
             1         张三         数学            90 
             1         张三         外语            100 
             2         李四         语文            88 
             2         李四         数学            99 
             2         李四         外语            66 
 现在我已经实现了行列转换 
 declare   @sql   nvarchar(1000) 
 set   @sql= 'select   ID,Name ' 
 select   @sql=@sql   + ',sum(case   ItemName   when    ' ' '+ItemName   + ' ' 'then   scores      end)[ '   +ItemName   + '] ' 
 from   (select   distinct   ItemName   from   table1)   as   a 
 select   @sql=@sql   +    '      from   table1   group   by   ID,Name ' 
 exec(@sql) 
       id      name         语文      数学      外语    
          1         张三         80            90            100 
          2         李四         88               99         66   
 现在我的问题是   如何对列    "语文 ", "数学 ", "外语 "   进行排序,例如   现在的顺序是: 
 语文   数学   外语   ,如何改成      外语   语文   数学
------解决方案--------------------將你的   
 declare @sql nvarchar(1000) 
 set @sql= 'select ID,Name ' 
 select @sql=@sql + ',sum(case ItemName when  ' ' '+ItemName + ' ' 'then scores  end)[ ' +ItemName + '] ' 
 from (select distinct ItemName from table1) as a 
 select @sql=@sql +  '  from table1 group by ID,Name ' 
 exec(@sql)   
 改為   
 Select OrderID = Identity(Int, 1, 1), * Into #T From table1   
 declare @sql nvarchar(1000) 
 set @sql= 'select ID,Name ' 
 select @sql=@sql + ',sum(case ItemName when  ' ' '+ItemName + ' ' 'then scores end)[ ' +ItemName + '] ' 
 from #T Group By ItemName Order By Min(OrderID) 
 select @sql=@sql +  ' from table1 group by ID,Name order by ID ' 
 exec(@sql)   
 Drop Table #T 
 即可
------解决方案--------------------鱼啊,楼主要求的排序是指定的,用临时表没法指定各个课程的先后啊.