我希望得到的结果如下铸件号     客户编码    进度    进度值
2402C-A    RFC010141   进度1   20
2402C-A    RFC010141   进度2   30
2402C-A    RFC010141   进度3   31

解决方案 »

  1.   


    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  select 铸件号,客户编码,进度,进度值
    from  生产订单计划
    unpivot
    (
    进度值 for 进度 in ( [进度1] ,[进度2] ,[进度3], [进度4])
    )t
    /*
    铸件号 客户编码 进度 进度值
    2402C-A RFC010141 进度1 20
    2402C-A RFC010141 进度2 30
    2402C-A RFC010141 进度3 31
    2402C-A RFC010141 进度4 33
    2802D-XX RFC010142 进度1 40
    2802D-XX RFC010142 进度2 0
    2802D-XX RFC010142 进度3 37
    2802D-XX RFC010142 进度4 56
    3333Z-3E RFC010154 进度1 50
    3333Z-3E RFC010154 进度2 9
    3333Z-3E RFC010154 进度3 45
    3333Z-3E RFC010154 进度4 50
    */
      

  2.   

    如果还有其他的进度,那么加上就行:select 铸件号,客户编码,进度,进度值
    from  生产订单计划
    unpivot
    (
    进度值 for 进度 in ( [进度1] ,[进度2] ,[进度3], [进度4],[进度5],[进度6])
    )t
      

  3.   

    这个是动态语句: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  
    godeclare @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-A RFC010141 进度1 20
    2402C-A RFC010141 进度2 30
    2402C-A RFC010141 进度3 31
    2402C-A RFC010141 进度4 33
    2802D-XX RFC010142 进度1 40
    2802D-XX RFC010142 进度2 0
    2802D-XX RFC010142 进度3 37
    2802D-XX RFC010142 进度4 56
    3333Z-3E RFC010154 进度1 50
    3333Z-3E RFC010154 进度2 9
    3333Z-3E RFC010154 进度3 45
    3333Z-3E RFC010154 进度4 50
    */