我有下表
1。物料单位:
id | material_unit
1 | Nos.
2 | lts
2。物料表:
id | Material_name
1 | bricks
2 | Cement
3。 Grn表:
id | material_id | qty | unit
1 | 1 | 100 | 1
2 | 2 | 500 | 1
3 | 2 | 100 | 1
4 | 1 | 200 | 1
4。消费表:
id | material_id | qty | unit
1 | 1 | 50 | 1
2 | 1 | 50 | 1
3 | 2 | 100 | 1
4 | 2 | 200 | 1
预期结果如下:
Material Name | Unit | Total Qty | Total Consumed Qty | Stock
Bricks | Nos. | 300 | 100 | 50
Cement | Nos. | 600 | 300 | 300
因此,在上述结果中,将从Grn表中获取总数量,从消耗表中获取总消费数量,库存是两者的差,应按Material_id分组。
下面的查询从GRN和消耗表中返回值的总和,但它与消耗表中条目数的乘积之和。
我在做什么错误,请有人帮我弄清楚我的错误。
SELECT sm.material_name as 'Material Name', mu.material_unit as 'Material Unit', sum(g.qty) as 'GRN Qty', sum(c.qty) as 'Consumed Qty', SUM(g.qty) - SUM(c.qty) as 'Stock' from grn g
JOIN material_table sm ON g.material_id = sm.id
JOIN material_unit_table mu ON g.unit_id = mu.id
JOIN consumption c ON c.material_id = g.material_id
group by g.material_id
我认为您的问题是由于grn表是您的原始表,所以选择为该表中的每一行获取了一行。将material_table用作您的第一个表,并使用其ID将其余的表与此表联接。
请尝试这个版本,让我知道它是否正常工作(考虑到它可能包含错误,我已经将它写到了记事本中)
SELECT sm.material_name as 'Material Name', mu.material_unit as 'Material Unit', sum(g.qty) as 'GRN Qty', sum(c.qty) as 'Consumed Qty', SUM(g.qty) - SUM(c.qty) as 'Stock'
FROM material_table sm
JOIN grn g ON g.material_id = sm.id
JOIN material_unit_table mu ON g.unit_id = mu.id
JOIN consumption c ON c.material_id = sm.material_id
GROUP BY by sm.material_id
希望有帮助!