行列转换
测试数据
编号 物料类别 产品编号
1 铅笔 0001
2 铅笔 0002
3 铅笔 0003
1 钢笔 0004
2 钢笔 0005
1 圆珠笔 0007
2 圆珠笔 0008
等等,其中物料类别不确定,这是一个订单的物料信息,要求实现以下效果:
编号 铅笔 钢笔 圆珠笔
1 0001 0004 0007
2 0002 0005 0008
3 0003 空 空
请问如何实现!!!!!???
------解决方案--------------------create table T(DateClass char(7), Class varchar(10), [Count] varchar(10))
insert T
select '1 ', '铅笔 ', '0001 '
union all
select '2 ', '铅笔 ', '0001 '
union all
select '3 ', '铅笔 ', '0001 '
union all
select '1 ', '钢笔 ', '0001 '
union all
select '2 ', '钢笔 ', '0001 '
union all
select '1 ', '圆珠笔 ', '0001 '
union all
select '2 ', '圆珠笔 ', '0001 '
declare @sql varchar(2000)
set @sql = 'select DateClass '
select @sql = @sql + ',sum(case Class when ' ' '+a.Class+ ' ' ' then count else 0 end )as [ '+a.Class+ '] '
from (select distinct Class from t)a
set @sql = @sql + ' from t group by DateClass '
exec(@sql)
drop table t
------解决方案--------------------http://blog.csdn.net/zjcxc/archive/2003/12/29/20075.aspx
------解决方案--------------------create table T(编号 int, 物料类别 nvarchar(10), 产品编号 char(4))
insert T select 1, '铅笔 ', '0001 '
union all select 2, '铅笔 ', '0002 '
union all select 3, '铅笔 ', '0003 '
union all select 1, '钢笔 ', '0004 '
union all select 2, '钢笔 ', '0005 '
union all select 1, '圆珠笔 ', '0007 '
union all select 2, '圆珠笔 ', '0008 '
declare @sql varchar(8000)
set @sql= 'select 编号, '
select @sql=@sql+quotename(物料类别)+ '=max(case when 物料类别= '+quotename(物料类别, ' ' ' ')+ ' then 产品编号 end), ' from T group by 物料类别
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from T group by 编号 '
exec(@sql)
------解决方案-------------------- create table aa(编号 int,物料类别 varchar(100),产品编号 char(10))
insert into aa select 1, '铅笔 ', '0001 ' union all