首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

动态行转列有关问题

2012-03-23 
动态行转列问题有表 #1 ,数据如下:rkey,PN,nums,rkey1215,MP4-2642-1,30,62273,FE2-2664-1,432,1594,FS2-2

动态行转列问题
有表 #1 ,数据如下:
rkey ,PN ,nums ,rkey1  

215 ,MP4-2642-1 ,30 ,62  
273 ,FE2-2664-1 ,432 ,1  
594 ,FS2-2708-1 ,20 ,370  
632 ,TE4-2718-1 ,48 ,28  
788 ,FE4-1376-1A ,200 ,28  
1466 ,AFE4-1975-1A ,380 ,28  
.......

我要的结果:
rkey ,PN ,62 ,1 ,370 ,28 .....

215 ,MP4-2642-1 ,30 ,0 ,0 ,0  
273 ,FE2-2664-1 ,0 ,432 ,0 ,0
594 ,FS2-2708-1 ,0 ,0 ,20 ,0
632 ,TE4-2718-1 ,0 ,0 ,0 ,48  
788 ,FE4-1376-1A ,0 ,0 ,0 ,200  
1466 ,AFE4-1975-1A ,0 ,0 ,0 ,380  
=================
下面是我写的SQL语句,但总报错: 
[消息 245,级别 16,状态 1,第 4 行
在将 varchar 值 ' then nums else 0 end) as ' 转换成数据类型 int 时失败。]  

declare @sql varchar(8000)
select @sql='select top 100 percent #1.rkey,#1.PN'
select @sql=@sql+
',max(case rkey1 when '+ rkey1 +' then [nums] else 0 end) as '+ convert(varchar(10),rkey1) 
from #1 
 group by #1.rkey1
select @sql=@sql+' from #1 group by #1.rkey,#1.PN,#1.rkey1 '

注意:rkey,nums,rkey1 都是int 型。
 

[解决办法]

SQL code
declare @sql varchar(8000)select @sql='select top 100 percent #1.rkey,#1.PN'select @sql=@sql+',max(case rkey1 when '+ cast(rkey1 as varchar) +' then [nums] else 0 end) as '+ convert(varchar(10),rkey1)  from #1   group by #1.rkey1select @sql=@sql+' from #1 group by #1.rkey,#1.PN,#1.rkey1 ' 

热点排行