SELECT   ID, Name, [Month],auth
   FROM dbo.Test3
数据列表:

1.静态行专列
  Select auth, 
         MAX( CASE WHEN [Month] = '一月' then Name else null end) 一月,
         MAX( CASE WHEN [Month] = '二月' then Name else null end) 二月,
         MAX( CASE WHEN [Month] = '三月' then Name else null end) 三月,
         MAX( CASE WHEN [Month] = '四月' then Name else null end) 四月,
         MAX( CASE WHEN [Month] = '五月' then Name else null end) 五月,
         MAX( CASE WHEN [Month] = '六月' then Name else null end) 六月,
         MAX( CASE WHEN [Month] = '七月' then Name else null end) 七月,
         MAX( CASE WHEN [Month] = '八月' then Name else null end) 八月,
         MAX( CASE WHEN [Month] = '九月' then Name else null end) 九月,
         MAX( CASE WHEN [Month] = '十月' then Name else null end) 十月,
         MAX( CASE WHEN [Month] = '十一月' then Name else null end) 十一月,
         MAX( CASE WHEN [Month] = '十二月' then Name else null end) 十二月                
 From dbo.Test3
 Group By auth
2.利用PIVOT函数
SELECT auth, 一月, 二月, 三月, 四月 , 五月, 六月 ,七月, 八月 ,九月, 十月 ,十一月, 十二月 
      FROM (SELECT auth, [Month], Name FROM dbo.Test3) AS SourceTable  
 PIVOT  
 (  
   MAX(Name)  
   FOR [Month] IN (一月, 二月, 三月, 四月 , 五月, 六月 ,七月, 八月 ,九月, 十月 ,十一月, 十二月 )  
 ) AS PivotTable;
3.利用PIVOT,高效动态行转列 (参考上面,只要生成动态列塞进去就行了)
 DECLARE @columns NVARCHAR(MAX) = '';  
   
 -- 动态生成列名  
 SELECT @columns +=  '' + [Month] + ','  
 FROM dbo.Test3;
 -- 去除最后一个逗号  
 SET @columns = LEFT(@columns, LEN(@columns) - 1);   
 PRINT(@columns)
   
 -- 构建动态 SQL 查询  
 DECLARE @sql NVARCHAR(MAX) = '  
 SELECT auth, ' + @columns + '  
 FROM   
 (  
   SELECT auth, [Month], Name FROM dbo.Test3 
 ) AS SourceTable  
 PIVOT  
 (  
     MAX(Name)  
     FOR [Month] IN (' + @columns + ')  
 ) AS PivotTable;';  
   
 -- 执行动态 SQL 查询
  
 PRINT(@sql)  
 EXECUTE(@sql);
结果:
