我有2张这样的表:
股票表
product_id bigint(20)
数量漂浮
销售表
product_id bigint(20)
数量漂浮
示例数据
股票表
PRODUCT_ID ---数量
1 --- 10
2 --- 11
3 --- 20
4 --- 50
1 --- 10
3 --- 10
销售表
PRODUCT_ID ---数量
1个--- 2个
2个--- 5个
3 --- 20
4 --- 40
1 --- 7
运行查询后我想要以下输出
PRODUCT_ID ---数量
1 --- 11
2个--- 6个
3 --- 10
4 --- 10
首先,我们认为我存储了
10件产品1
11产品数量2
20件产品3
50件产品4
10件产品1(现在我有20件产品1)
10件产品3(现在我有30件产品3)
其次,我们认为我卖了
2产品数量1
5产品数量2
20件产品3
40件产品4
7产品1的数量(现在我已经销售了9个产品1)
第三,我想知道现在手中有多少股票
11产品数量1(20-9 = 11)
6产品量2(11-5 = 6)
10量产品3(30-20 = 10)
10份产品4(50-4 = 10)
我的问题是:要了解此库存的查询是什么?
先谢谢你回答我的问题。
答案 0 :(得分:4)
这个答案适用于Oracle - 没有MySql所以无法在那里测试
select product_id, sum(qty) from
(
select product_id, qty from stock
union all
select product_id, (-1 * qty) from sales
) as a
group by prod
答案 1 :(得分:0)
你的问题是缺乏细节,看起来甚至可能在提供的数据中包含拼写错误。尽管您的数据实际上不支持这个(!!!),但我会假设您正在尝试计算库存数量和销售数量之间的差异。看起来您需要以下内容:
select
st.product_id,
sto.qty-st.qty
from
salesTable as st
join stockTable as sto on sto.product_id=st.product_id
答案 2 :(得分:0)
克里斯的回答绝对正确。但是对于我想要添加的信息,我在NET上找到了这个信息。
SELECT tunion.product_id, (
(IFNULL((SELECT SUM(s.qty) FROM stock s WHERE s.product_id=tunion.product_id),0))-
(IFNULL((SELECT SUM(p.qty) FROM sales p WHERE p.product_id=tunion.product_id),0)))
AS quantity
FROM (SELECT DISTINCT s.product_id FROM stock s
UNION ALL SELECT DISTINCT p.product_id FROM sales p)
AS tunion GROUP BY tunion.product_id