[英]Display a INWARD & OUTWARD of Stock Quantity of Inventory in MySQL Query By Selected Date and Warehouse
在查詢中需要幫助以獲得所需的 output。這是我的表結構:
產品
這里的qty
是庫存
ID | 產品名稱 | 數量 |
---|---|---|
1個 | 測試 | 5個 |
購買
從采購表中,我們必須按 ID 為 select 日期和倉庫
ID | 倉庫編號 | 日期 |
---|---|---|
1個 | 1個 | 04-03-2022 |
采購項目
內向庫存應從此表中顯示
ID | 產品編號 | 數量 | 購買編號 |
---|---|---|---|
1個 | 1個 | 5個 | 1個 |
命令
從訂單表中,我們必須按 ID 為 select 日期和倉庫這里的詳細信息是倉庫 ID
ID | 細節 | 日期 |
---|---|---|
1個 | 1個 | 04-03-2022 |
訂單項目
應從該表中顯示出貨量。
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');
這是一個返回您要查找的格式的查詢。
我已將其更新為使用date
和warehouse_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.