行列转换
测试数据
编号 物料类别 产品编号
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
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+ ',max(case 物料类别 when ' ' '+rtrim(物料类别)+ ' ' ' then 产品编号 else 0 end) as '+rtrim(cast(物料类别 as char))+ ' ' from (select distinct 物料类别 from aa)a
set @sql=@sql+ ' from aa group by 编号 '
exec(@sql)
drop table aa
result:
编号 钢笔 铅笔 圆珠笔
----------- ----------- ----------- -----------
1 4 1 7
2 5 2 8
3 0 3 0
[解决办法]
create table T([No] char, Class varchar(100), GoodsNo varchar(10))
insert T
select '1 ', 'pencil ', '0001 '
union all
select '2 ', 'pencil ', '0002 '
union all
select '3 ', 'pencil ', '0003 '
union all
select '1 ', 'pen ', '0004 '
union all
select '2 ', 'pen ', '0005 '
union all
select '1 ', 'ballpen ', '0006 '
union all
select '2 ', 'ballpen ', '0007 '
declare @sql varchar(2000)
set @sql = 'select [No] '
select @sql = @sql + ',min(case Class when ' ' '+a.Class+ ' ' ' then GoodsNo else null end )as [ '+a.Class+ '] '
from (select distinct Class from t )a
set @sql = @sql + ' from t group by No '
exec(@sql)
drop table t