有表 #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 型。
    

解决方案 »

  1.   


    补充下:
    rkey1 的值是动态的。
    比如:值是(62,1,370,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
    1466  ,AFE4-1975-1A  ,0          ,0        ,0          ,20 
    rkey1 值是(62,1)时,应该这样表示:
    rkey  ,PN            ,62         ,1        
    215   ,MP4-2642-1    ,30         ,0        
    然后,还要能够动态汇总:按上面的第1个例子,汇总后是: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          ,400 注意:因为行转列生成的新列是动态的,所以有可能这次生成4列,下次生成6列,第三次只生成2列。
    这样,在进行分类汇总的时候,对应的列也是时刻变动的。请问这样如何实现?
      

  2.   

    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.rkey1
    select @sql=@sql+' from #1 group by #1.rkey,#1.PN,#1.rkey1 '