我现在有一张这样的一个表格,如下:
物料编码    上月未完成数量     本月计划数量     订单类型     车间
A001             100                    0              CB         A1
A002             20                     100            CB         A1
A001             50                     0              MF         A1
A002             245                    34             MF         A1
请问如何将上述表格用sql排列成一下表格形式:       物料编码     CB上月未完成数量    CB本月计划数量    MF上月未完成数量  MF本月计划数量    车间        
        A001              100                 0                 50                0            A1
        A002              20                 100                245               34           A1         

解决方案 »

  1.   

    http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html
      

  2.   

    CREATE TABLE TESTTB (物料编码 CHAR(10),上月未完成数量  INT,本月计划数量 INT,订单类型 CHAR(5),车间  CHAR(2))
    INSERT TESTTB
    SELECT 'A001',            100        ,            0    ,          'CB',        'A1' UNION
    SELECT 'A002',            20         ,           100   ,        'CB'   ,     'A1' UNION
    SELECT 'A001',            50         ,           0      ,        'MF',        'A1' UNION
    SELECT 'A002',            245        ,            34    ,        'MF',        'A1' SELECT * FROM TESTTB
    SELECT 物料编码,
    SUM(CB上月未完成数量)CB上月未完成数量,
    SUM(CB本月计划数量)CB本月计划数量,
    SUM(MF上月未完成数量)MF上月未完成数量,
    SUM(MF本月计划数量)MF本月计划数量,
    车间 FROM (SELECT 物料编码,
          MAX(CASE WHEN 订单类型='CB' THEN 上月未完成数量 ELSE 0 END) AS CB上月未完成数量,
          MAX(CASE WHEN 订单类型='CB' THEN 本月计划数量 ELSE 0 END) AS CB本月计划数量 ,
          MAX(CASE WHEN 订单类型='MF' THEN 上月未完成数量 ELSE 0 END) AS MF上月未完成数量,
          MAX(CASE WHEN 订单类型='MF' THEN 本月计划数量 ELSE 0 END) AS MF本月计划数量,车间
    FROM TESTTB GROUP BY 物料编码,订单类型,上月未完成数量,本月计划数量,车间) AS T 
    GROUP BY 物料编码,车间
    A001       100 0 50 0 A1
    A002       20 100 245 34 A1
      

  3.   

    ---测试数据---
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([物料编码] varchar(4),[上月未完成数量] int,[本月计划数量] int,[订单类型] varchar(2),[车间] varchar(2))
    insert [tb]
    select 'A001',100,0,'CB','A1' union all
    select 'A002',20,100,'CB','A1' union all
    select 'A001',50,0,'MF','A1' union all
    select 'A002',245,34,'MF','A1'
     
    ---查询---
    select
      [物料编码],
      [CB上月未完成数量]=SUM(case [订单类型] when 'CB' then [上月未完成数量] else 0 end),
      [CB本月计划数量]=SUM(case [订单类型] when 'CB' then [本月计划数量] else 0 end),
      [MF上月未完成数量]=SUM(case [订单类型] when 'MF' then [上月未完成数量] else 0 end),
      [MF本月计划数量]=SUM(case [订单类型] when 'MF' then [本月计划数量] else 0 end),
      [车间]
    from
      tb
    group by
      [物料编码],  
      [车间]---结果---
    物料编码 CB上月未完成数量   CB本月计划数量    MF上月未完成数量   MF本月计划数量    车间   
    ---- ----------- ----------- ----------- ----------- ---- 
    A001 100         0           50          0           A1
    A002 20          100         245         34          A1(所影响的行数为 2 行)