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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用SQL查询将总数量和消耗的数量转换为单个结果相关的知识,希望对你有一定的参考价值。

我有下表

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

答案

根据您的样本数据,我认为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问题,并提供适当的样本数据和所需的结果。

以上是关于如何使用SQL查询将总数量和消耗的数量转换为单个结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 unpivot 将未知数量的列转换为行的动态 SQL 查询

如何编写带有数量单位转换的分组查询SQL?

SQL语句如何统计数据库当日信息数量

将总订单乘以jquery中的订单数量

mysql数据库单个库对表数量有没有限制

将 SQL 原始查询转换为 Linq