现有两表:产量表  和   保留品表
 
  产量表 列名有      日期,   班次, 产量
                  2011-08-01   早班  100
                  2011-08-01   中班  100
                  2011-08-01   晚班  100
                  2011-08-02   早班  100  保留品表 列名有    日期,   班次, 保留品
                  2011-08-01   早班  30
                  2011-08-01   晚班  30
                  2011-08-02   早班  30
需要合成的结果:    日期,    产量, 保留品
                  2011-08-01     300   60
                  2011-08-02     100   30 请教各位大侠,这个查询语句怎么写?
非常感谢

解决方案 »

  1.   

    先合并后再行转列
    select 日期
    ,sum(case when type='产量表' then 产量 else 0 end) 产量
    ,sum(case when type='保留品表' then 产量 else 0 end) 保留品表
    from 
    (
    select a.*,'产量表' type
    from 产量表 a
    union all
    select a.*,'保留品表' type
    from 保留品表 b
    )
    group by 日期
    ;
      

  2.   


    --多对多的处理方法,转化成1对多  或者1对1
    select 日期,sum(产量) as cnt1
      from 产量表
     group by 日期;  
    --解决一个多的问题,剩下的用这个1 和 保留品表的多关联也行,或者把 保留品表 也变成 1 再关联也行
    select 日期,sum(产量) as cnt2
      from 保留品表
     group by 日期;  --最后的sqlSELECT T1.日期, T1.CNT1, T2.CNT2
      FROM (SELECT 日期, SUM(产量) AS CNT1 FROM 产量表 GROUP BY 日期) T1,
           (SELECT 日期, SUM(产量) AS CNT2 FROM 保留品表 GROUP BY 日期) T2
     WHERE T1.日期 = T2.日期;