SQLITE-计算剩余项目数量
我有一个库存表,其中包含特定商品id/颜色的总商品数量: 库存表格SQLITE-计算剩余项目数量,sqlite,subtraction,Sqlite,Subtraction,我有一个库存表,其中包含特定商品id/颜色的总商品数量: 库存表格 item_code | colour | stock --------------------------------------------- A | red | 10 A | blue | 8 A | yellow | 5 B
item_code | colour | stock
---------------------------------------------
A | red | 10
A | blue | 8
A | yellow | 5
B | red | 5
B | blue | 0
B | yellow | 15
order_id | item_code | colour | ordered_qty
----------------------------------------------------------------------
1 | A | red | 3
1 | A | blue | 1
1 | A | yellow | 2
1 | B | red | 1
2 | A | red | 1
2 | A | yellow | 3
2 | B | yellow | 15
item_code | colour | remaining
------------------------------------------------
A | red | 6
A | blue | 7
A | yellow | 0
B | red | 4
B | blue | 0
B | yellow | 0
然后我有一个表,其中存储了已订购的项目数量(请注意,相同的项目可以在不同的订单中找到)
订单\u表
item_code | colour | stock
---------------------------------------------
A | red | 10
A | blue | 8
A | yellow | 5
B | red | 5
B | blue | 0
B | yellow | 15
order_id | item_code | colour | ordered_qty
----------------------------------------------------------------------
1 | A | red | 3
1 | A | blue | 1
1 | A | yellow | 2
1 | B | red | 1
2 | A | red | 1
2 | A | yellow | 3
2 | B | yellow | 15
item_code | colour | remaining
------------------------------------------------
A | red | 6
A | blue | 7
A | yellow | 0
B | red | 4
B | blue | 0
B | yellow | 0
我需要创建一个保存剩余可用库存数量的表:例如,对于库存表中每个项目的数量,我需要从订单表中减去“已订购”数量,得到如下结果:
剩余_表
item_code | colour | stock
---------------------------------------------
A | red | 10
A | blue | 8
A | yellow | 5
B | red | 5
B | blue | 0
B | yellow | 15
order_id | item_code | colour | ordered_qty
----------------------------------------------------------------------
1 | A | red | 3
1 | A | blue | 1
1 | A | yellow | 2
1 | B | red | 1
2 | A | red | 1
2 | A | yellow | 3
2 | B | yellow | 15
item_code | colour | remaining
------------------------------------------------
A | red | 6
A | blue | 7
A | yellow | 0
B | red | 4
B | blue | 0
B | yellow | 0
我正在考虑使用一个视图,因为对于每个新插入的订单行,表都会自动更新。我能够获得每个项目/颜色的“已订购”数量:
SELECT item_code, colour, SUM(stock) as already_placed FROM orders_table GROUP BY item_code, colour
此查询将返回如下内容(请注意,B/blue从未订购过):
现在,我一直在构建一个查询,该查询将在一个表或另一个视图中提供剩余的表数量
长话短说,我需要从原始的库存表中减去已经放置的数量,你能帮我吗?我在这里找不到任何“减法”或“减法”函数
有可能吗
提前感谢,请向您致意。您可以将
库存表
与订单表
合并,但在订单表
中,您可以更改订单数量
的符号。然后您可以按分组
差不多
SELECT item_code, colour, SUM(stock) as remaining FROM
(
SELECT item_code, colour, stock FROM stock_table
UNION ALL
SELECT item_code, colour, -ordered_qty as stock FROM orders_table
)
GROUP BY item_code, colour
SQL Fiddle:
其他选择
SELECT sto.item_code, sto.colour, sto.in_stock - COALESCE(ord.already_placed, 0) AS remaining
FROM
(SELECT item_code, colour, SUM(stock) AS in_stock FROM stock_table GROUP BY item_code, colour) sto
LEFT JOIN
(SELECT item_code, colour, SUM(ordered_qty) AS already_placed FROM orders_table GROUP BY item_code, colour) ord
ON ord.item_code = sto.item_code AND ord.colour = sto.colour
在这里,sto
和ord
的SELECT
可以放在两个视图中(一个是订购的库存总量,另一个是库存总量)
SQL Fiddle:您可以将
库存表
和订单表
合并,但在订单表
中更改订单数量
的符号。然后您可以按
分组
差不多
SELECT item_code, colour, SUM(stock) as remaining FROM
(
SELECT item_code, colour, stock FROM stock_table
UNION ALL
SELECT item_code, colour, -ordered_qty as stock FROM orders_table
)
GROUP BY item_code, colour
SQL Fiddle:
其他选择
SELECT sto.item_code, sto.colour, sto.in_stock - COALESCE(ord.already_placed, 0) AS remaining
FROM
(SELECT item_code, colour, SUM(stock) AS in_stock FROM stock_table GROUP BY item_code, colour) sto
LEFT JOIN
(SELECT item_code, colour, SUM(ordered_qty) AS already_placed FROM orders_table GROUP BY item_code, colour) ord
ON ord.item_code = sto.item_code AND ord.colour = sto.colour
在这里,sto
和ord
的SELECT
可以放在两个视图中(一个是订购的库存总量,另一个是库存总量)
SQL FIDLE:您可以使用相关子查询来计算已订购的特定项目的数量:
item_code | colour | already_placed
----------------------------------------------------
A | red | 4
A | blue | 1
A | yellow | 5
B | red | 1
B | yellow | 15
CREATE VIEW remaining_view AS
SELECT item_code,
colour,
stock - (SELECT IFNULL(SUM(ordered_qty), 0)
FROM orders_table
WHERE orders_table.item_code = stock_table.item_code
AND orders_table.colour = stock_table.colour)
AS remaining
FROM stock_table
您可以使用相关子查询来计算订购了多少特定项目:
item_code | colour | already_placed
----------------------------------------------------
A | red | 4
A | blue | 1
A | yellow | 5
B | red | 1
B | yellow | 15
CREATE VIEW remaining_view AS
SELECT item_code,
colour,
stock - (SELECT IFNULL(SUM(ordered_qty), 0)
FROM orders_table
WHERE orders_table.item_code = stock_table.item_code
AND orders_table.colour = stock_table.colour)
AS remaining
FROM stock_table
您可以使用自然左连接:
SELECT item_code, colour, IFNULL(q_stock - q_ordered, 0) as remaining
FROM (SELECT item_code, colour, SUM(stock) as q_stock FROM stock_table GROUP BY item_code, colour)
NATURAL LEFT JOIN
(SELECT item_code, colour, SUM(ordered_qty) as q_ordered FROM orders_table GROUP BY item_code, colour)
您可以使用自然左连接:
SELECT item_code, colour, IFNULL(q_stock - q_ordered, 0) as remaining
FROM (SELECT item_code, colour, SUM(stock) as q_stock FROM stock_table GROUP BY item_code, colour)
NATURAL LEFT JOIN
(SELECT item_code, colour, SUM(ordered_qty) as q_ordered FROM orders_table GROUP BY item_code, colour)