有两个表:
表一(工序名)
OrderID   OrderName
   01      工序1
   02      工序2
   03      工序3
................表二(生产状态)
ID    OrderID  ....... iState(状态)
0001    01                 完成
0001    02                 加工中
0001    03                 待加工
0002    01                 待加工
0002    02                 待加工
0002    03                 待加工要显示效果 产品号      工序1     工序2       工序3  ..........  工序N
 0001         完成      加工       待加工 
 0002        待加工    待加工      待加工 
.......

解决方案 »

  1.   

    --测试表及数据
    create table #1(orderid char(2),ordername varchar(20))
    create table #2(id char(4),orderid char(2),istate varchar(20))insert into #1
    select '01','工序1' union
    select '02','工序2' union
    select '03','工序3' insert into #2
    select '0001','01','完成' union
    select '0001','02','加工中' union
    select '0001','03','待加工' union
    select '0002','01','待加工' union
    select '0002','02','待加工' union
    select '0002','03','待加工' --处理
    declare @sql varchar(8000)
    select @sql=''
    select @sql=@sql+',['+ordername+']=max(case OrderID when '''+OrderID+''' then  iState else '''' end)'
    from #1
    group by OrderID,ordernameexec('select ID'+@sql+' from #2 group by ID')--删除测试表
    drop table #1
    drop table #2--结果
    /*
    id 工序1 工序2 工序3
    0001 完成 加工中 待加工
    0002 待加工 待加工 待加工
    */
      

  2.   

    --改进一下。
    --处理
    declare @sql varchar(8000)
    select @sql=''
    select @sql=@sql+',['+a.ordername+']=max(case OrderID when '''+a.OrderID+''' then  iState else '''' end)'
    from #1 a,#2 b
    where a.orderid=b.orderid
    group by a.OrderID,a.ordernameexec('select ID'+@sql+' from #2 group by ID')
      

  3.   

    rivery:
    另外,假如我用iState=1代表完工 iState=2代表加工中   iState=3代表待加工
    这里表二的内容为:
    ID    OrderID  ....... iState(状态)
    0001    01                 1
    0001    02                 2
    0001    03                 3
    0002    01                 3
    0002    02                 3
    0002    03                 3
    如何显示成产品号      工序1     工序2       工序3  ..........  工序N
     0001         完成      加工       待加工 
     0002        待加工    待加工      待加工 
    .......
      

  4.   

    --测试表及数据create table #1(orderid char(2),ordername varchar(20))
    create table #2(id char(4),orderid char(2),istate varchar(20))insert into #1
    select '01','工序1' union
    select '02','工序2' union
    select '03','工序3' insert into #2
    select '0001','01','1' union
    select '0001','02','2' union
    select '0001','03','3' union
    select '0002','01','3' union
    select '0002','02','3' union
    select '0002','03','3' --处理
    declare @sql varchar(8000)
    select @sql=''
    select @sql=@sql+',['+a.ordername+']=case max(case OrderID when '''+a.OrderID+''' then  iState else '''' end) when ''1'' then ''完成'' when ''2'' then ''加工中'' when ''3'' then ''待加工'' end'
    from #1 a,#2 b
    where a.orderid=b.orderid
    group by a.OrderID,a.ordernameexec('select ID'+@sql+' from #2 group by ID')
    --删除测试表drop table #1
    drop table #2
    --结果
    /*
    id 工序1 工序2 工序3
    0001 完成 加工中 待加工
    0002 待加工 待加工 待加工
    */
      

  5.   

    谢谢rivery
    原来Case可以嵌套使用