行列转换遇到的问题
数据库有张表名为"生产订单计划";数据内容大概如下:
客户编码(关键字) 铸件号 进度1 进度2 进度3 进度4 ……
RFC010141 2402C-A 20 30 31 33
RFC010142 2802D-XX 40 0 37 56
RFC010154 3333Z-3E 50 9 45 50
我在做行列转换查询时,语句如下:
declare @n int
set @n=1
select 铸件号,客户编码,进度 = '进度1' , 进度值 = '进度'+convert(varchar(10),@n) from 生产订单计划
结果出现的是
铸件号 客户编码 进度 进度值
2402C-A RFC010141 进度1 进度1
……………………………………… 进度1
……………………………… 进度1
也就是进度值哪里显示的是“进度1”几个字 而不是我要的 20,40,50这几个值,因为表中进度有很多不是只有到进度4就结束了,后面还有进度5,进度6…………进度31 我省略了,所以我在转换时想用个变量来
[解决办法]
这个是动态语句:
create table 生产订单计划
(
客户编码 varchar(10),
铸件号 varchar(20),
进度1 int,
进度2 int,
进度3 int,
进度4 int
)
insert into 生产订单计划
select 'RFC010141' , '2402C-A', 20 , 30 , 31,33
union all select 'RFC010142' , '2802D-XX', 40 , 0 , 37 , 56
union all select 'RFC010154' , '3333Z-3E', 50 , 9 , 45 , 50
go
declare @sql nvarchar(4000)
set @sql = ''
select @sql = @sql + ',['+name+']'
from syscolumns
where id = OBJECT_ID('生产订单计划')
and name like '进度%'
order by colid
set @sql = 'select 铸件号,客户编码,进度,进度值
from 生产订单计划
unpivot
(
进度值 for 进度 in (' + stuff(@sql,1,1,'') + ') ) t'
exec(@sql)
/*
铸件号客户编码进度进度值
2402C-ARFC010141进度120
2402C-ARFC010141进度230
2402C-ARFC010141进度331
2402C-ARFC010141进度433
2802D-XXRFC010142进度140
2802D-XXRFC010142进度20
2802D-XXRFC010142进度337
2802D-XXRFC010142进度456
3333Z-3ERFC010154进度150
3333Z-3ERFC010154进度29
3333Z-3ERFC010154进度345
3333Z-3ERFC010154进度450
*/