我在数据库中查询到的数据是这样的形式:
订单   存货名称  工序名  数量
0001    aaaa      a       1000
0001    aaaa      b       2000
0001    aaaa      c       3000怎样用SQL语句将其改成这样的形式:订单   存货名称   a         b      c
0001    aaaa    1000  2000  3000sql数据库

解决方案 »

  1.   


    declare @sql nvarchar(max)
    select @sql=isnull(@sql+',max(case [工序名] when ''','max(case [工序名] when ''')+工序名+''' then '+cast(数量 as varchar)+' else 0 end) as ['+工序名+']' from tb
    set @sql='select 订单,存货名称,'+@sql+' from tb group by 订单,存货名称'
    select @sql
    exec(@sql)
      

  2.   

    可以用pivot, google一下就行。
      

  3.   

    工序名 相同 求合计时用把 max 改为sum
    use tempdb
    go
    if OBJECT_ID('Tempdb..#1') is not null
    drop table #1
    Create table #1(订单 varchar(10),  存货名称 varchar(10),  工序名 varchar(10),  数量 int)
    insert into #1
    select '0001',    'aaaa',      'a',       1000 union all
    select '0001',    'aaaa',      'b',       2000 union all
    select '0001',    'aaaa',      'c',       3000
    godeclare @sql nvarchar(2000)
    set @sql='select 订单,存货名称'
    select @sql=@sql+','+QUOTENAME(工序名)+'=max(case when [工序名]='+QUOTENAME(工序名,'''')+' then 数量 else 0 end)'
    from #1 group by 工序名
    exec(@sql+' from #1 group by 订单,存货名称')
    /*
    订单 存货名称 a b c
    0001 aaaa 1000 2000 3000
    */
      

  4.   

    其它方法参照:
    http://bbs.csdn.net/topics/240002706
      

  5.   

    select 订单,存货名称,max(case when [工序名]='a' then 数量 else 0 end) as [a],max(case when [工序名]='b' then 数量 else 0 end) as [b],max(case when [工序名]='c' then 数量 else 0 end) as [c] from tb group by 订单,存货名称