跳至內容
Astera Technology

另一倉有多貨,為甚麼遮蓋本倉補貨需要?

按各倉自己的最低存量比較,不先把所有倉加起來才決定補貨。

下載完整個案資料及參考答案 ↓

先準備用來排查的資料

同事要的是逐倉補貨清單。所有倉數量及門檻先合計,多貨倉便可能抵銷另一倉短缺。按貨品加倉庫連接,在該層面判斷,再另行決定是否調貨。

以下完整建表及資料只在新的 SQLite 測試資料庫執行。全部紀錄均為假設,數量以件計,輸入的 cents 金額欄以貨幣的分存整數;計算後的平均數可能不足整分。小型例子的各表均完整列在預覽。

假設輸入:levels
貨品編號倉庫數量
AW13
AW210
下載可編輯 CSV ↓
假設輸入:reorder_rules
貨品編號倉庫最低數量
AW15
AW22
下載可編輯 CSV ↓
可直接執行的完整測試資料
CREATE TABLE levels(sku TEXT,warehouse TEXT,qty INTEGER,PRIMARY KEY(sku,warehouse));
CREATE TABLE reorder_rules(sku TEXT,warehouse TEXT,min_qty INTEGER,PRIMARY KEY(sku,warehouse));
INSERT INTO levels VALUES ('A','W1',3),('A','W2',10);
INSERT INTO reorder_rules VALUES ('A','W1',5),('A','W2',2);

重現錯誤結果,再核對更正

錯誤示範查詢:只用來重現問題
SELECT l.sku,SUM(l.qty) AS qty,SUM(r.min_qty) AS min_qty FROM levels l
JOIN reorder_rules r ON r.sku=l.sku AND r.warehouse=l.warehouse
GROUP BY l.sku HAVING SUM(l.qty)<SUM(r.min_qty) ORDER BY l.sku;
實際執行的錯誤示範結果
查詢結果
沒有回傳資料(空結果)
下載可編輯 CSV ↓
更正後的 SQLite 查詢
SELECT l.sku,l.warehouse,l.qty,r.warehouse AS rule_warehouse,r.min_qty FROM levels l
JOIN reorder_rules r ON r.sku=l.sku AND r.warehouse=l.warehouse WHERE l.qty<r.min_qty ORDER BY l.sku,l.warehouse;
更正查詢的實際結果
貨品編號倉庫數量門檻所屬倉最低數量
AW13W15
下載可編輯 CSV ↓

W1 有三件,門檻五件,要跟進;W2 有十件,門檻兩件。合計 13 對七看似足夠,卻遮蓋 W1。更正後列 W1,不假設 W2 的貨能立即調到。

套用前先測邊界及資料範圍

把 A/W2 門檻改為十二,再加入 B/W1 三件、門檻五件。結果須保留貨品及倉庫:A/W1 與 B/W1 數量及門檻相同,卻是兩項不同補貨工作。

邊界測試要另開新的假設資料庫,重做完整建表及資料,只套用以下改動,再執行更正查詢。測試改動不可用於正式系統。

新假設副本內的邊界改動
UPDATE reorder_rules SET min_qty=12 WHERE warehouse='W2';
INSERT INTO levels VALUES ('B','W1',3);
INSERT INTO reorder_rules VALUES ('B','W1',5);
改動後再執行更正查詢的實際結果
貨品編號倉庫數量門檻所屬倉最低數量
AW13W15
AW210W212
BW13W15
下載可編輯 CSV ↓

門檻由測試政策提供,不是需求預測;預留、交期、批次限制及調倉費未計。

以上錯誤、更正及邊界結果都已在 SQLite 執行,並與另行編寫的預期資料逐行核對。證據只適用於這組假設條件,未測其他資料庫、正式效能或你的現有資料結構。

相關資源