如何使用SQL查询将总数量和消耗的数量转换为单个结果

问题描述 投票:0回答:1

我有下表

1。单位表:

id | Unit_name
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

4。消费表:

id | material_id | qty | unit
1  | 1           | 50  |   1
2  | 2           | 100 |   1

预期结果如下:

Material Name | Unit | Total Qty | Total Consumed Qty | Stock
Bricks        | Nos. | 100       | 50                 | 50
Cement        | Nos. | 500       | 100                | 400

因此,在上述结果中,将从Grn表中获取总数量,从消耗表中获取总消费数量,库存是两者的差,应按物料名称分组。

在以下查询中,仅获取总计数量的结果,还需要您的帮助来获取消耗的数量。

我是SQL的新手,虽然确实尝试过,但是在这一点上仍然停留并需要帮助。

Select sm.material_name as 'Material Name', mu.unit_name as 'Unit Name' , sum(g.qty) as 'Total Qty' from grn g
JOIN material_table.sm ON g.material_name = sm.id
JOIN material_unit.mu ON g.unit_name = mu.id

GROUP by material_name

sql inner-join union-all sqlresultsetmapping
1个回答
0
投票

根据您的样本数据,我认为GROUP BY似乎没有必要。您的查询和示例数据不一致。但是根据您的问题和示例数据:

select m.material_name, u.unit_name, grn.qty as total, c.qty as consumed,
       coalesce(gnr.qty, 0) - coalesce(c.qty, 0) as stock
from material mh join
     unit u
     on m.id = u.id left join
     grn
     on g.head_id = mh.id left join
     consumption c 
     on c.sub_material_id = m.id ;

如果任何表的每种材料有多行,那么这不是正确的解决方案。如果是这样,我建议您问一个[[new问题,并提供适当的样本数据和所需的结果。

© www.soinside.com 2019 - 2024. All rights reserved.