簡體   English   中英

Display a INWARD & OUTWARD of Stock Quantity in MySQL Query By Selected Date and Warehouse 庫存數量

[英]Display a INWARD & OUTWARD of Stock Quantity of Inventory in MySQL Query By Selected Date and Warehouse

在查詢中需要幫助以獲得所需的 output。這是我的表結構:

  1. 產品

    這里的qty是庫存

    ID 產品名稱 數量
    1個 測試 5個
  2. 購買

    從采購表中,我們必須按 ID 為 select 日期和倉庫

    ID 倉庫編號 日期
    1個 1個 04-03-2022
  3. 采購項目

    內向庫存應從此表中顯示

    ID 產品編號 數量 購買編號
    1個 1個 5個 1個
  4. 命令

    從訂單表中,我們必須按 ID 為 select 日期和倉庫這里的詳細信息是倉庫 ID

    ID 細節 日期
    1個 1個 04-03-2022
  5. 訂單項目

    應從該表中顯示出貨量。

    ID 產品編號 數量 order_id
    1個 1個 5個 1個

期望的 Output 應該是這樣的:

其中P表示采購, O表示訂購

產品名稱 向內的 向外 關閉
測試(P) 5個 5個
測試(O) 2個 3個
測試1(P) 2個 2個
測試 1(O) 1個 1個

生成相應表的查詢:

db<> 在這里擺弄

CREATE TABLE `products` (
  `id` int(11) NOT NULL,
  `product_name` varchar(150) NOT NULL,
  `qty` int(10) NOT NULL,
  `price` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
;


CREATE TABLE `purchase` (
  `id` int(11) NOT NULL,
  `warehouse_id` int(11) DEFAULT NULL,
  `date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
;

CREATE TABLE `purchase_item` (
  `id` int(11) NOT NULL,
  `product_id` int(11) NOT NULL,
  `purchase_id` int(11) NOT NULL,
  `qty` varchar(255) NOT NULL,
  `rate` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
;

CREATE TABLE `order` (
  `id` int(11) NOT NULL,
  `warehouse_id` int(11) DEFAULT NULL,
  `date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
;

CREATE TABLE `order_item` (
  `id` int(11) NOT NULL,
  `product_id` int(11) NOT NULL,
  `order_id` int(11) NOT NULL,
  `qty` varchar(255) NOT NULL,
  `rate` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
;

INSERT INTO `products` (`id`, `product_name`, `qty`, `price`) 
VALUES
(1,  'TEST', 1, '50'),
(2, 'TEST 2', 0, '50'),
(3, 'TEST 3', 0, '50'),
(4,  'TEST 4', 0, '50')
;

INSERT INTO `purchase` (`id`, `warehouse_id`, `date`) VALUES
(1, 1, '2022-03-02');

INSERT INTO `purchase_item` (`id`, `product_id`, `purchase_id`, `qty`, `rate`) VALUES
(1, 1, 1, '2', '50');


INSERT INTO `order` (`id`, `warehouse_id`, `date`) VALUES
(1, 1, '2022-03-02');

INSERT INTO `order_item` (`id`, `product_id`, `order_id`, `qty`, `rate`) VALUES
(1, 1, 1, '2', '50');

這是一個返回您要查找的格式的查詢。
我已將其更新為使用datewarehouse_id作為WHERE子句中的參數。

 with stock_movements as ( select 'P' PA, pu.warehouse_id, pu.`date` mvtdate, p.id, concat(p.product_name,'(P)') Pname, pi.qty pqty, 0 as oqty, sum(coalesce(pi.qty,0)) Total from products p left join purchase_item pi on p.id = pi.product_id left join purchase pu on pu.id = purchase_id group by pu.warehouse_id, p.id, p.product_name, pu.`date`, pi.qty union all select 'A', ord.`warehouse_id`, ord.`date` mvtDate, p.id, concat(p.product_name,'(O)'), 0, sum(coalesce(o.qty,0)) oqty, sum(coalesce(pi.qty,0)) -sum(coalesce(o.qty,0)) from products p left join order_items o on p.id = o.product_id left join purchase_item pi on p.id = pi.product_id left join `order` ord on ord.id = order_id group by ord.`warehouse_id`, ord.`date`, p.id, p.product_name order by id ) select PA, warehouse_id, mvtdate "date", id "ID", pname "Product Name", sum(pqty) "Input", sum(oqty) "Output", sum(Total) "Total" from stock_movements where mvtDate = '2022-03-02' and warehouse_Id = '1' group by id, pname,pa,warehouse_id order by id,pa desc;
 擴音器 | 倉庫編號 | 日期 | 編號 | 產品名稱 | 輸入 |  Output | 總計:- |  ----------: |:-------- |  -: |:------------ |  ----: |  -----: |  ----:P |  1 |  2022-03-02 |  1 | 測試(P) |  2 |  0 |  2個|  1 |  2022-03-02 |  1 | 測試(O) |  0 |  1 |  1頁 |  1 |  2022-03-02 |  2 | 測試 2(P) |  3 |  0 |  3個|  1 |  2022-03-02 |  2 | 測試 2(O) |  0 |  1 |  2個

db<> 在這里擺弄

第一個數據庫 FIDDLE:*db<>fiddle [此處]( https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=a6d7e94af44035d838b2be5bf863a476

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM