MSSQL行転列


    

 
if object_id('tb')is not null drop table tb  
go  
create table tb([  ] varchar(4),[  ] varchar(10), [  ] int)  
insert  tb values('2012','   ',86)  
insert  tb values('2012','   ',78)  
insert  tb values('2012','   ',93)  
insert  tb values('2013','   ',75)  
insert  tb values('2013','   ',88)  
insert  tb values('2013','   ',94)  
insert  tb values('2014','   ',90)  
insert  tb values('2014','   ',74)  
insert  tb values('2014','   ',74)  


 SQL2000 ,              CASE WHEN  ,SQL2005      PIVOT  

2000  SQL

 
select [  ],  
max(case [  ] when '   ' then [  ] else 0 end)[   ],  
max(case [  ] when '   ' then [  ] else 0 end)[   ],  
max(case [  ] when '   ' then [  ] else 0 end)[   ]  
from tb  
group by [  ]  
2000  SQL,       
[sql] view plaincopy CODE              
declare @sql varchar(2000)  
set @sql='select [  ]'  
select @sql=@sql+',max(case [  ] when '''+[  ]+''' then [  ] else 0 end) ['+  +']'   
from(select distinct [  ] from tb) t  
set @sql=@sql+' from tb group by [  ]'  
exec(@sql)  

2005  SQL

 
select *  
from tb  
pivot(  
max([  ])  
for [  ]  
in(   ,   ,   )  
)p  

2005  SQL

declare @sql varchar(2000)  
--取得部門数select@sql=isnull(@sql+',')+quotename([部門])from tbグループby[部門]set@sql='select*from tb pivot(max([考課])for[部門]in('+@sql+'))p'exec(@sql)