已知有两个表,
表A:日期、班次、班别、切割合同号、切割轧批号,炉号、管号、切割长度、切割重量、
表B:日期、炉号、管号、产出合同号、产出长度、产出重量,
现有如下要求:
查询条件:日期起止、班次、班别、切割合同号、切割轧批号查询结果数据列:日期、班次、班别、切割合同号、切割轧批号、炉号、管号、切割长度、切割重量、产出合同号、产出长度、产出重量、长度差、重量差。
其中,产出合同号、产出长度、产出重量 取自表B。
长度差=切割长度-产出长度
重量差=切割重量-产出重量对于管号,到表A中查到日期、班次、班别、切割合同号、切割轧批号、炉号、切割长度、切割重量。
然后根据管号+炉号到表B中找产出合同号、产出长度、产出重量,如找到多条,按日期最早的一条,如未找到,则产出合同为空,产出长度、产出重量为0。高手赐教,如何实现

解决方案 »

  1.   

    select a.日期,a.班次,a.班别,a.切割合同号,a.切割轧批号,a.炉号,a.管号,切割长度,切割重量,
    c.日期,c.产出合同号,产出长度,产出重量,decode(产出长度,null,0,切割长度-产出长度) 长度差,decode(产出重量,null,0,切割重量-产出重量) 重量差
    from a,
    (
    select 日期,炉号,管号,产出合同号,产出长度,产出重量
    from 
    (select 日期,炉号,管号,产出合同号,产出长度,产出重量,
    row_number() over(partition by 炉号,管号 order by 日期 desc) recno
    from b) where recno=1
    ) c 
    where a.炉号=c.炉号(+) and a.管号=c.管号(+)
      

  2.   

    create table b(
    日期 date,炉号 varchar2(20),管号 varchar2(20),产出合同号 varchar2(20),产出长度 number(10,2),产出重量 number(10,2));create table a(
    日期 date,班次 varchar2(10),班别 varchar2(10),切割合同号 varchar2(20),切割轧批号 varchar2(20),炉号 varchar2(10),管号 varchar2(10),切割长度 number(10,2),切割重量 number(10,2))
    a表数据:
    1 2009-4-3 10 20 1001 2001 10 10 212.12 233.22
    2 2009-4-3 10 20 1001 2001 12 10 212.12 233.22
    3 2009-4-3 10 20 1001 2001 15 10 212.12 233.22
    4 2009-4-3 10 20 1001 2001 16 10 212.12 233.22b表数据:
    1 2009-4-5 10 10 1001 233.22 231.00
    2 2009-4-7 10 10 1001 233.22 231.00
    3 2009-4-8 12 10 1002 233.22 231.00
    4 2009-4-10 12 10 1002 233.22 231.00
    5 2009-4-10 15 10 1002 233.22 231.00查询结果:
    1 2009-4-3 10 20 1001 2001 10 10 212.12 233.22 2009-4-7 1001 233.22 231.00 -21.1 2.22
    2 2009-4-3 10 20 1001 2001 12 10 212.12 233.22 2009-4-10 1002 233.22 231.00 -21.1 2.22
    3 2009-4-3 10 20 1001 2001 15 10 212.12 233.22 2009-4-10 1002 233.22 231.00 -21.1 2.22
    4 2009-4-3 10 20 1001 2001 16 10 212.12 233.22 0 0