商品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报价公司未知数量谢谢!
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报价公司未知数量谢谢!
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)
当然,如果字符串超过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最后再组合?
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,商品名')