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