首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

行列转换遇到的有关问题

2013-12-04 
行列转换遇到的问题数据库有张表名为生产订单计划数据内容大概如下:客户编码(关键字)铸件号进度1 进度2

行列转换遇到的问题
数据库有张表名为"生产订单计划";数据内容大概如下:
客户编码(关键字)  铸件号    进度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
*/

热点排行