~~~~~~~~双表 联合查询问题 急急急急急急急急急 在线等~~~~~~~~

woolcool 2009-04-15 10:12:42
已知有两个表,
表A:日期、班次、班别、切割合同号、切割轧批号,炉号、管号、切割长度、切割重量、
表B:日期、炉号、管号、产出合同号、产出长度、产出重量,
现有如下要求:
查询条件:日期起止、班次、班别、切割合同号、切割轧批号

查询结果数据列:日期、班次、班别、切割合同号、切割轧批号、炉号、管号、切割长度、切割重量、产出合同号、产出长度、产出重量、长度差、重量差。
其中,产出合同号、产出长度、产出重量 取自表B。
长度差=切割长度-产出长度
重量差=切割重量-产出重量

对于管号,到表A中查到日期、班次、班别、切割合同号、切割轧批号、炉号、切割长度、切割重量。
然后根据管号+炉号到表B中找产出合同号、产出长度、产出重量,如找到多条,按日期最早的一条,如未找到,则产出合同为空,产出长度、产出重量为0。

高手赐教,如何实现

...全文
75 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
woolcool 2009-04-15
  • 打赏
  • 举报
回复
下面是模拟数据,格式没对好,请见谅,中间是用空格 隔开的

日期、 班次 班别 切割合同号 切割轧批号 炉号 管号 切割长度 切割重量
20090202 1 2 7878 8982 1 1 123 234
20090203 2 1 7873 8981 2 2 123 234
20090204 3 3 7876 8982 3 3 123 234
20090205 1 4 7877 8983 4 4 123 234
20090206 3 1 7878 8984 5 5 123 234
20090207 2 3 7879 8985 6 6 123 234
20090208 1 2 7871 8986 7 7 123 234
20090209 1 4 7872 8987 8 8 123 234
20090211 2 2 7873 8988 9 9 123 234
20090212 3 3 7874 8989 10 10 123 234
20090213 1 4 7833 8911 11 11 123 234
20090214 2 1 7845 8912 12 12 123 234
20090215 3 2 7866 8913 13 13 123 234
20090216 1 3 7877 8914 14 14 123 234
20090218 1 4 7888 8915 15 15 123 234


日期、 炉号 管号 产出合同号 产出长度 产出重量,
20090202 1 1 89821 121 230
20090203 2 2 89811 121 230
20090204 3 3 89821 121 230
20090205 4 4 89831 121 230
20090206 5 5 89841 121 230
20090207 6 6 89851 121 230
20090208 7 7 89861 121 230
20090209 8 8 89871 121 230
20090211 9 9 89881 121 230
20090212 10 10 89891 121 230
20090213 11 11 89111 121 230
20090214 12 12 89121 121 230
20090215 13 13 89131 121 230
20090216 14 14 89141 121 230
20090218 15 15 89151 121 230
20090202 11 11 89821 121 230
20090203 2 2 89811 121 230
20090204 3 3 89821 121 230
20090205 4 4 89831 121 230
20090206 5 5 89841 121 230
20090207 6 6 89851 121 230
20090208 7 7 89861 121 230
20090209 8 8 89871 121 230
20090211 9 9 89881 121 230
20090212 10 10 89891 121 230
20090213 11 11 89111 121 230
20090214 12 12 89121 121 230
20090215 13 13 89131 121 230
20090216 14 14 89141 121 230
20090218 15 15 89151 121 230
20090202 21 21 89821 121 230
20090203 22 22 89811 121 230
20090204 23 23 89821 121 230
20090205 24 24 89831 121 230
20090206 25 25 89841 121 230
20090207 26 26 89851 121 230
20090208 27 27 89861 121 230
20090209 28 28 89871 121 230
20090211 29 29 89881 121 230
20090212 10 10 89891 121 230
20090213 11 11 89111 121 230
20090214 12 12 89121 121 230
20090215 13 13 89131 121 230
20090216 14 14 89141 121 230
20090218 15 15 89151 121 230
阿三 2009-04-15
  • 打赏
  • 举报
回复
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.22

b表数据:
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

阿三 2009-04-15
  • 打赏
  • 举报
回复
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.管号(+)
caipeiwen 2009-04-15
  • 打赏
  • 举报
回复
楼主能否给出几行数据,做个例子

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧