工序表:
ID    工序编号    工序名称
1     GX01        下料
2     GX02        打弯
3     GX03        冲孔员工表:
ID    员工编号    员工姓名
1     YG01        张三
2     YG02        李四
3     YG93        王五加工表:
ID    生产单号      物品编码     员工编号     工序编号     数量
1     SC01          X01           YG01        GX01         10
2     SC01          X01           YG02        GX02         10  
3     SC01          X01           YG03        GX03          9 
现在要弄成这样的格式:
ID    生产单号      物品编码     下料数量    下料人员      打弯数量  打弯人员    冲孔数量   冲孔人员
1     SC01          X01           10          张三         10         李四        9          王五
请问各位高手,有什么好的办法吗?

解决方案 »

  1.   

    case when else end
    left join
      

  2.   

    select 
       a.id,
       c.生产单号.
       c.物品编码,
       c.数量 as 下料数量,
       b.员工姓名 as 下料人员,
       c.数量 as 打弯数量,
       b.员工姓名 as 打弯人员,
       c.数量 as 冲孔数量,
       b.员工姓名 as 冲孔人员
    from 
       工序表 a,员工表 b,加工表 c
    where 
       a.id=b.id and b.id=c.id and a.工序编号=c.工序编号 and b.员工编号=c.员工编号
      

  3.   

    -- =========================================
    -- -----------t_mac 小编-------------------
       --------------------希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('工序表') IS NOT NULL
    DROP TABLE 工序表
    GO
    CREATE TABLE 工序表(ID int, 工序编号 varchar(10),工序名称  varchar(10) )
    insert 工序表 SELECT 
    1  ,  'GX01' ,       '下料' UNION ALL SELECT 
    2  ,  'GX02' ,       '打弯' UNION ALL SELECT 
    3  ,  'GX03',        '冲孔' 
    go
    IF OBJECT_ID('员工表') IS NOT NULL
    DROP TABLE 员工表
    GO
    CREATE TABLE 员工表(ID int, 员工编号 varchar(10),员工姓名   varchar(10) )
    insert 员工表 SELECT 
    1,    'YG01',        '张三' UNION ALL SELECT 
    2,    'YG02',        '李四' UNION ALL SELECT 
    3 ,   'YG03',        '王五' 
    go
    IF OBJECT_ID('加工表') IS NOT NULL
    DROP TABLE 加工表
    GO
    CREATE TABLE 加工表(ID int, 生产单号  varchar(10),物品编码  varchar(10),员工编号 varchar(10), 工序编号 varchar(10), 数量 int)
    insert 加工表 SELECT 
    1 ,   'SC01'  ,        'X01'  ,        'YG01'  ,      'GX01'   ,     10 UNION ALL SELECT 
    2 ,   'SC01' ,         'X01'  ,        'YG02' ,       'GX02'  ,      10  UNION ALL SELECT 
    3 ,   'SC01' ,         'X01'  ,        'YG03'  ,      'GX03'  ,        9 
    go
    select 
    生产单号,  
    物品编码 ,
    下料数量=max(case when g.工序名称='下料' then 数量 else 0 end) ,
    下料人员=MAX(case when g.工序名称='下料' then 员工姓名 else '' end),
    打弯数量=max(case when g.工序名称='打弯' then 数量 else 0 end) ,
    打弯人员=MAX(case when g.工序名称='打弯' then 员工姓名 else '' end),
    冲孔数量=max(case when g.工序名称='冲孔' then 数量 else 0 end) ,
    冲孔人员 =MAX(case when g.工序名称='冲孔' then 员工姓名 else '' end)from 加工表 j join 员工表 y on j.员工编号=y.员工编号  join 工序表 g on j.工序编号=g.工序编号
    group by 生产单号 , 物品编码 /*
        生产单号      物品编码    下料数量    下料人员      打弯数量  打弯人员    冲孔数量  冲孔人员 
        SC01          X01          10          张三        10        李四        9          王五 
    */
      

  4.   

    -- =========================================
    -- -----------t_mac 小编-------------------
       --------------------希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('工序表') IS NOT NULL
    DROP TABLE 工序表
    GO
    CREATE TABLE 工序表(ID int, 工序编号 varchar(10),工序名称  varchar(10) )
    insert 工序表 SELECT 
    1  ,  'GX01' ,       '下料' UNION ALL SELECT 
    2  ,  'GX02' ,       '打弯' UNION ALL SELECT 
    3  ,  'GX03',        '冲孔' 
    go
    IF OBJECT_ID('员工表') IS NOT NULL
    DROP TABLE 员工表
    GO
    CREATE TABLE 员工表(ID int, 员工编号 varchar(10),员工姓名   varchar(10) )
    insert 员工表 SELECT 
    1,    'YG01',        '张三' UNION ALL SELECT 
    2,    'YG02',        '李四' UNION ALL SELECT 
    3 ,   'YG03',        '王五' 
    go
    IF OBJECT_ID('加工表') IS NOT NULL
    DROP TABLE 加工表
    GO
    CREATE TABLE 加工表(ID int, 生产单号  varchar(10),物品编码  varchar(10),员工编号 varchar(10), 工序编号 varchar(10), 数量 int)
    insert 加工表 SELECT 
    1 ,   'SC01'  ,        'X01'  ,        'YG01'  ,      'GX01'   ,     10 UNION ALL SELECT 
    2 ,   'SC01' ,         'X01'  ,        'YG02' ,       'GX02'  ,      10  UNION ALL SELECT 
    3 ,   'SC01' ,         'X01'  ,        'YG03'  ,      'GX03'  ,        9 
    go
    select 
    ID=MIN(j.ID),
    生产单号,  
    物品编码 ,
    下料数量=max(case when g.工序名称='下料' then 数量 else 0 end) ,
    下料人员=MAX(case when g.工序名称='下料' then 员工姓名 else '' end),
    打弯数量=max(case when g.工序名称='打弯' then 数量 else 0 end) ,
    打弯人员=MAX(case when g.工序名称='打弯' then 员工姓名 else '' end),
    冲孔数量=max(case when g.工序名称='冲孔' then 数量 else 0 end) ,
    冲孔人员 =MAX(case when g.工序名称='冲孔' then 员工姓名 else '' end)from 加工表 j join 员工表 y on j.员工编号=y.员工编号  join 工序表 g on j.工序编号=g.工序编号
    group by 生产单号 , 物品编码 /*
    ID          生产单号       物品编码       下料数量        下料人员       打弯数量        打弯人员       冲孔数量        冲孔人员
    ----------- ---------- ---------- ----------- ---------- ----------- ---------- ----------- ----------
    1           SC01       X01        10          张三         10          李四         9           王五
      

  5.   

    或者这样-- =========================================
    -- -----------t_mac 小编-------------------
       --------------------希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('工序表') IS NOT NULL
    DROP TABLE 工序表
    GO
    CREATE TABLE 工序表(ID int, 工序编号 varchar(10),工序名称  varchar(10) )
    insert 工序表 SELECT 
    1  ,  'GX01' ,       '下料' UNION ALL SELECT 
    2  ,  'GX02' ,       '打弯' UNION ALL SELECT 
    3  ,  'GX03',        '冲孔' 
    go
    IF OBJECT_ID('员工表') IS NOT NULL
    DROP TABLE 员工表
    GO
    CREATE TABLE 员工表(ID int, 员工编号 varchar(10),员工姓名   varchar(10) )
    insert 员工表 SELECT 
    1,    'YG01',        '张三' UNION ALL SELECT 
    2,    'YG02',        '李四' UNION ALL SELECT 
    3 ,   'YG03',        '王五' 
    go
    IF OBJECT_ID('加工表') IS NOT NULL
    DROP TABLE 加工表
    GO
    CREATE TABLE 加工表(ID int, 生产单号  varchar(10),物品编码  varchar(10),员工编号 varchar(10), 工序编号 varchar(10), 数量 int)
    insert 加工表 SELECT 
    1 ,   'SC01'  ,        'X01'  ,        'YG01'  ,      'GX01'   ,     10 UNION ALL SELECT 
    2 ,   'SC01' ,         'X01'  ,        'YG02' ,       'GX02'  ,      10  UNION ALL SELECT 
    3 ,   'SC01' ,         'X01'  ,        'YG03'  ,      'GX03'  ,        9 
    go
    select 
    ID=MIN(j.ID),
    生产单号,  
    物品编码 ,
    下料数量=sum(case when g.工序名称='下料' then 数量 else 0 end) ,
    下料人员=MAX(case when g.工序名称='下料' then 员工姓名 else '' end),
    打弯数量=sum(case when g.工序名称='打弯' then 数量 else 0 end) ,
    打弯人员=MAX(case when g.工序名称='打弯' then 员工姓名 else '' end),
    冲孔数量=sum(case when g.工序名称='冲孔' then 数量 else 0 end) ,
    冲孔人员 =MAX(case when g.工序名称='冲孔' then 员工姓名 else '' end)from 加工表 j join 员工表 y on j.员工编号=y.员工编号  join 工序表 g on j.工序编号=g.工序编号
    group by 生产单号 , 物品编码 /*
    ID          生产单号       物品编码       下料数量        下料人员       打弯数量        打弯人员       冲孔数量        冲孔人员
    ----------- ---------- ---------- ----------- ---------- ----------- ---------- ----------- ----------
    1           SC01       X01        10          张三         10          李四         9           王五
    */