我是SQL的新手,我正在尝试创建一个数据库来管理一个小库存。这是db的结构:
DatabaseStructure
我需要创建一个查询,返回每种材料的总库存。因此,第一步是查找与材料相关的所有批次。其次,查找与每个批次相关的所有动作。然后,根据移动类型,将与每个移动相关的数量相加,但是(如果它是一个良好的收据是加(+),但如果它是一个库存提取是减(-))。
下面是一个表的示例,其中包含样例数据和期望的结果。
材料表
MaterialID | MaterialDescription | 1 | 瓶 | 2
---|---|
框 |
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
;