我是 SQL 新手,我正在嘗試創建一個資料庫來管理少量庫存。這是資料庫的結構:
資料庫結構
我需要創建一個查詢來回傳每種材料的總庫存。因此,第一步是查找與該材料相關的所有批次。其次,查找與每個批次相關的所有動作。然后,將與每個移動相關的數量相加,但取決于移動型別(如果是好的收貨是加法( ),但如果是庫存提取是減法(-))。
以下是包含示例資料和所需結果的表格示例。
表材質
| 材質 ID | 材質說明 |
|---|---|
| 1 | 瓶子 |
| 2 | 盒子 |
表批處理
| 批號 | 材質 ID | 供應商材料 | 供應商批次 | 截止日期 |
|---|---|---|---|---|
| 1000 | 1 | 2096027 | 00123456 | 2025 年 12 月 12 日 |
| 1001 | 1 | 2096027 | 00987654 | 2026 年 11 月 11 日 |
| 1002 | 2 | 102400 | 202400E | 2023 年 10 月 10 日 |
表運動
| 運動ID | 批號 | 運動型別 | 數量 | 由...制作 | 創建日期 |
|---|---|---|---|---|---|
| 1 | 1000 | 好收據 | 100 | [email protected] | 2022 年 4 月 10 日 |
| 2 | 1000 | 庫存提取 | 20 | [email protected] | 2022 年 4 月 15 日 |
| 3 | 1000 | 庫存提取 | 25 | [email protected] | 2022 年 4 月 17 日 |
| 4 | 1001 | 好收據 | 100 | [email protected] | 2022 年 4 月 20 日 |
| 5 | 1001 | 庫存提取 | 10 | [email protected] | 2022 年 4 月 26 日 |
| 6 | 1002 | 好收據 | 50 | [email protected] | 2022 年 2 月 26 日 |
預期查詢結果 - 每種材料的總庫存:
| 材質說明 | 總庫存 |
|---|---|
| 瓶子 | 145 |
| 盒子 | 50 |
TotalInventory計算:對于Bottle有兩個 100 的好收貨移動和三個 20、25 和 10 的提貨。因此,總庫存將為 (100 100)-(20 25 10)=145。
謝謝你的幫助!
uj5u.com熱心網友回復:
select
mat.MaterialDescription,
sum(
case mov.MovementType
when 'Good receipt' then 1
when 'Inventory withdrawal' then -1
else 0 /* don't know what to do for other MovementTypes */
end * mov.Quantity
) as TotalInventory
from
Material as mat
left join Batch as bat on bat.MaterialID = mat.MaterialID
left join Movement as mov on mov.BatchID = bat.BatchID
group by
mat.MaterialDescription
;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474609.html
標籤:sql sql服务器 tsql 天蓝色 sql 数据库
