MySql table 的发行、收据和余额
Issue, Receipt and Balance from MySql table
我有两个 tables,发货和收货,我在那里发货和接收数量:
问题表:
Order
Type
Qty
OD12
A
48
OD19
A
33
OD12
B
14
收据表:
Order
Type
Qty
OD12
A
20
OD19
A
15
OD12
B
11
我想要的结果:
余额:
Order
Type
Qty
OD12
A
28
OD19
A
18
OD12
B
03
IssueTable 包含已发出订单的详细信息,一个订单可以有多个“Type”的产品。同样,ReceiptTable 包含已完成和收到的订单的详细信息。我想要一个余额 table,它根据订单和类型从收货数量中减去发货数量。
您可以尝试使用连接方法:
SELECT it.`Order`, it.Type, it.Qty - rt.Qty AS Qty
FROM IssueTable it
INNER JOIN ReceiptTable rt
ON rt.`Order` = it.`Order` AND rt.Type = it.Type;
此答案假设每个订单都有匹配的收据。如果不是,该方法可能必须根据您的期望略有改变。作为旁注,ORDER
是 MySQL 中的保留关键字,您应该避免使用它命名您的列和表。
SELECT `Order`,
`Type`,
COALESCE(IssueTable.Qty, 0) - COALESCE(ReceiptTable.Qty, 0) Qty
FROM ( SELECT `Order`, `Type` FROM IssueTable
UNION
SELECT `Order`, `Type` FROM ReceiptTable ) TotalTable
LEFT JOIN IssueTable USING (`Order`, `Type`)
LEFT JOIN ReceiptTable USING (`Order`, `Type`);
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=cafd416abcbf7ab31f54bf6efbd6566f
查询假定 (Order, Type)
在每个单独的 table 中是唯一的。如果不是,则在 tables 本身时使用聚合子查询。
我有两个 tables,发货和收货,我在那里发货和接收数量:
问题表:
Order | Type | Qty |
---|---|---|
OD12 | A | 48 |
OD19 | A | 33 |
OD12 | B | 14 |
收据表:
Order | Type | Qty |
---|---|---|
OD12 | A | 20 |
OD19 | A | 15 |
OD12 | B | 11 |
我想要的结果:
余额:
Order | Type | Qty |
---|---|---|
OD12 | A | 28 |
OD19 | A | 18 |
OD12 | B | 03 |
IssueTable 包含已发出订单的详细信息,一个订单可以有多个“Type”的产品。同样,ReceiptTable 包含已完成和收到的订单的详细信息。我想要一个余额 table,它根据订单和类型从收货数量中减去发货数量。
您可以尝试使用连接方法:
SELECT it.`Order`, it.Type, it.Qty - rt.Qty AS Qty
FROM IssueTable it
INNER JOIN ReceiptTable rt
ON rt.`Order` = it.`Order` AND rt.Type = it.Type;
此答案假设每个订单都有匹配的收据。如果不是,该方法可能必须根据您的期望略有改变。作为旁注,ORDER
是 MySQL 中的保留关键字,您应该避免使用它命名您的列和表。
SELECT `Order`,
`Type`,
COALESCE(IssueTable.Qty, 0) - COALESCE(ReceiptTable.Qty, 0) Qty
FROM ( SELECT `Order`, `Type` FROM IssueTable
UNION
SELECT `Order`, `Type` FROM ReceiptTable ) TotalTable
LEFT JOIN IssueTable USING (`Order`, `Type`)
LEFT JOIN ReceiptTable USING (`Order`, `Type`);
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=cafd416abcbf7ab31f54bf6efbd6566f
查询假定 (Order, Type)
在每个单独的 table 中是唯一的。如果不是,则在 tables 本身时使用聚合子查询。