[英]Query to aggregate across multiple tables
我是 SQL 的新手,我正在尝试创建一个数据库来管理少量库存。 这是数据库的结构:
我需要创建一个查询来返回每种材料的总库存。 因此,第一步是查找与物料关联的所有批次。 其次,查找与每个批次相关的所有动作。 然后,对与每个移动相关的数量求和,但取决于移动类型(如果是良好收货则加 (+),但如果是库存提取则减 (-))。
以下是包含示例数据和所需结果的表格示例。
台面材质
材质ID | 材质说明 |
---|---|
1个 | 瓶子 |
2个 | 盒子 |
表格批次
批号 | 材质ID | 供应商材料 | 供应商批次 | 截止日期 |
---|---|---|---|---|
1000 | 1个 | 2096027 | 00123456 | 12/12/2025 |
1001 | 1个 | 2096027 | 00987654 | 11/11/2026 |
1002 | 2个 | 102400 | 202400E | 2023 年 10 月 10 日 |
表运动
运动ID | 批号 | 运动类型 | 数量 | 由...制作 | 创建日期 |
---|---|---|---|---|---|
1个 | 1000 | 好收据 | 100 | user1@email.com | 2022 年 4 月 10 日 |
2个 | 1000 | 库存提取 | 20 | user2@email.com | 2022 年 4 月 15 日 |
3个 | 1000 | 库存提取 | 25 | user3@email.com | 2022 年 4 月 17 日 |
4个 | 1001 | 好收据 | 100 | user1@email.com | 2022 年 4 月 20 日 |
5个 | 1001 | 库存提取 | 10 | user4@email.com | 2022 年 4 月 26 日 |
6个 | 1002 | 好收据 | 50 | user1@email.com | 2/26/2022 |
预期查询结果 - 每种材料的总库存:
材质说明 | 总库存 |
---|---|
瓶子 | 145 |
盒子 | 50 |
TotalInventory
计算:对于Bottle ,有两个 100 的收货移动和三个 20、25 和 10 的提货。因此,总库存将为 (100+100)-(20+25+10)=145。
谢谢你的帮助!
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
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.