很简单SQL三个表做查询,送分题,太久没有接触SQL,基础的都忘了!

首先一个库中有3个表
A表

SAPN0# QTY
A 2
B 4
C 8
D 12

B表
HUBN0# QTY
Q 2
W 3
E 20

C表
SAPNO# HUBN0#

A Q
B W
C E
D E

其中A表是我们系统数量,B表是对方仓库数量,C表是A表与B表的NO#做关联。
我希望得到的表是,
B表的 HUBNO# 对应A表的QTY B表的QTY 以及他们之间的差值

HUBN0# A.QTY B.QTY DIFF
Q 2 2 0

W 4 3 1
E 20 20 0

额外有一点需要注意,就是A表可能有两个NO#对应B表一个NO#

最后详细一些,麻烦了,太久没接触SQL了 ,虽然逻辑知道,但是,具体执行有些生疏了。

https://www.cnblogs.com/hellowzd/p/4205280.html

SELECT C.HUBNO,A.QTY,B.QTY,ABS(A.QTY-B.QTY) FROM C LEFT JOIN A ON C.SAPNO=A.SAPNO LEFT JOIN B ON C.HUBNO=B.HUBNO

select b.no,b.qty,isnull(a.qty,0),b.qty-isnull(a.qty,0)
from b left join c on b.no=c.bno
left join (select no,sum(qty) qty from a) a
on c.ano=a.no

select c.hubno,a.qty,b.qty, a.qty-b.qty
from c left join a
on c.sapno=a.sapno
left join b
on c.hubno=b.hubno

select c.hubno,a.qty,b.qty, a.qty-b.qty
from a,b,c where c.sapno=a.sapno and a.qty=b.qty and b.hubno=c.hubno

SELECT
b.hubno,
sum(a.qty) a_qty,
b.qty,
sum(a.qty) - b.qty
FROM
b
LEFT JOIN c ON b.hubno = c.hubno
LEFT JOIN a ON c.sapno = a.sapno
GROUP BY b.hubno;

select t.b_a, t.total_a, t.total_b, t.total_a - t.total_b
from (select sum(a.QTY) as total_a, b.HUBNO as b_a, b.QTY as total_b
from A a
left join C c
on a.SAPNO = c.SAPNO
left join B b
on c.HUBNO = b.HUBNO
group by b.HUBNO, b.QTY) t

基本思路就是按照 B表的A列和B列分组,然后求出对应A表的值(包括多个对应B表行的和),然后就容易了,直接用结果表求最后的结果就好了。

SELECT
B.HUBNO#,
A.QTY AS AQTY,
B.QTY AS BQTY,
ABS(B.QTY - A.QTY) AS DIFF
FROM
C
LEFT JOIN A ON C.SAPNO# = A.SAPNO#
LEFT JOIN B ON C.HUBNO# = B.HUBNO#

先问你一个问题:A表的可以按SAPN0值合并不?就是相同的SAPN0合到一起? 由于你的A表和B表不是一一对应的,所以你要B表和A表QTY值的差 ,怎么计算呢?

select t.b_a, t.total_a, t.total_b, t.total_a - t.total_b
from (select sum(a.QTY) as total_a, b.HUBNO as b_a, b.QTY as total_b
from A a
left join C c
on a.SAPNO = c.SAPNO
left join B b
on c.HUBNO = b.HUBNO
group by b.HUBNO, b.QTY) t