SQL行转换列--------------
看下这个
1:
mf表结构
id char 10//商店ID
name char 10//商店NAME 
product varchar 50//产品NAME
pcount int //产品数量
2:
pmf表结构
pname varchar 50//产品NAME
这个表信息完全可以从mf得到,但是为了问题简单化
所以又建了一表
3:mf表数据如下
1 a p1 10
1 a p3 20
2 b p2 30
2 b p4 50
3 c p1 100
4:pmf表数据如下(该表的数据要大于等于上表的product数据)
p1
p2
p3
p4
p5
p6
p7
p8
p9
p10
5:SQL语句--this is aoiumi 's demo
declare @sql varchar(8000)
set @sql = 'select id,name,'
select @sql = @sql + 'sum(case pname when '''+pname+''' then pcount else 0 end) as '''+pname+''','
from (select distinct pname from pmf) as t 
--上面二行 是用来拼“列”(--产品名称pname)
--和对应列的数据(产品数量pcount)即有多少产品就有多少列
--CASE 可以行列转换效果,但是有多少产品种类,对应着每个商店就重复多少次。
--所以又用到SUMselect @sql = left(@sql,len(@sql)-1) + 
--上面这句就是简单的去最后一个逗号
' from mf a join pmf b on a.product=b.pname group by id,name'
--上面这句是必要的group by
exec(@sql)
6:运行结果
商店ID 商店NAME p1 p10 p2 p3 p4 p5 p6 p7 p8 p9
1 a 10 0 0 20 0 0 0 0 0 0
2 b 0 0 30 0 50 0 0 0 0 0
3 c 100 0 0 0 0 0 0 0 0 0