商品ID 商品名 报价公司 第1报价 第2报价 第3报价
13 XXX A公司 0.5 0.8 0.9
13 XXX B公司 0.5 0.6 0.8
13 XXX C公司 0.5 0.6 0.9
13 XXX D公司 0.8 0.6 0.8
14 YYY A公司 1.1 1.4 1.6
14 YYY B公司 1.5 1.0 1.8
14 YYY C公司 1.5 1.6 1.3
14 YYY D公司 1.3 1.1 1.8
转成如下格式:商品ID 商品名 报价公司A第1价 报价公司A第2价 报价公司A第3价 报价公司B第1价 报价公司B第2价 报价公司B第3价 ....
13 xxx 0.5 0.8 0.9 0.5 0.6 0.8
14 YYY 1.1 1.4 1.6 1.5 1.0 1.8报价公司未知数量谢谢!

解决方案 »

  1.   

    declare @sql varchar(8000)
    set @sql=''select 
       @sql=@sql
         +',['+报价公司+'第1价]=max(case 报价公司 when '''+报价公司+''' then 第1报价 end)'
         +',['+报价公司+'第2价]=max(case 报价公司 when '''+报价公司+''' then 第2报价 end)'
         +',['+报价公司+'第3价]=max(case 报价公司 when '''+报价公司+''' then 第3报价 end)'
    from 表名 group by 报价公司set @sql='select 商品ID,商品名'+@sql+' from 表名 group by 商品ID,商品名'exec(@sql)
      

  2.   

    我提供的就是一个处理报价公司未知的动态SQL处理方案。
    当然,如果字符串超过8000字节的长度需要另外处理。
      

  3.   

    @sql  varchar(8000)  
    超过 8000了!是不是要分成多个语句!sql1 +sql2declare  @sql  varchar(8000)  
    set  @sql=''  
     
    select    
         @sql1=@sql1  
             +',['+报价公司+'第1价]=max(case  报价公司  when  '''+报价公司+'''  then  第1报价  end)'  
             +',['+报价公司+'第2价]=max(case  报价公司  when  '''+报价公司+'''  then  第2报价  end)'  
             +',['+报价公司+'第3价]=max(case  报价公司  when  '''+报价公司+'''  then  第3报价  end)'  
    from  表名  group  by  报价公司   where 商品id>xxx最后再组合?
      

  4.   

    declare  @sql1 varchar(8000),@sql2 varchar(8000)
    set @sql1=''
    set @sql2=''select    
        @sql1=@sql1  
        +','+报价公司+'第1价=max(case when 报价公司='''+报价公司+''' then 第1报价 end)'  
        +','+报价公司+'第2价=max(case when 报价公司='''+报价公司+''' then 第2报价 end)'  
        +','+报价公司+'第3价=max(case when 报价公司='''+报价公司+''' then 第3报价 end)'  
    from 
        表名
    where 
        报价公司 in(select distinct top xx 报价公司 from 表名 order by 报价公司)
    group by
        报价公司select    
        @sql2=@sql2  
        +','+报价公司+'第1价=max(case when 报价公司='''+报价公司+''' then 第1报价 end)'  
        +','+报价公司+'第2价=max(case when 报价公司='''+报价公司+''' then 第2报价 end)'  
        +','+报价公司+'第3价=max(case when 报价公司='''+报价公司+''' then 第3报价 end)'  
    from 
        表名
    where 
        报价公司 not in(select distinct top xx 报价公司 from 表名 order by 报价公司)
    group by
        报价公司exec('select 商品ID,商品名'+@sql1+@sql2+' from 表名 group by 商品ID,商品名')
      

  5.   

    谢谢 libin_ftsafe(子陌红尘:当libin告别ftsafe)