Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLITE-计算剩余项目数量_Sqlite_Subtraction - Fatal编程技术网

SQLITE-计算剩余项目数量

SQLITE-计算剩余项目数量,sqlite,subtraction,Sqlite,Subtraction,我有一个库存表,其中包含特定商品id/颜色的总商品数量: 库存表格 item_code | colour | stock --------------------------------------------- A | red | 10 A | blue | 8 A | yellow | 5 B

我有一个库存表,其中包含特定商品id/颜色的总商品数量:

库存表格

    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)