如何使用 SQL 查询将总数量和消耗数量转化为单个结果
Posted
技术标签:
【中文标题】如何使用 SQL 查询将总数量和消耗数量转化为单个结果【英文标题】:How to get total qty and consumed qty into single results using SQL query 【发布时间】:2020-05-02 11:58:24 【问题描述】:我有以下表格
1.材料单位:
id | Unit_name
1 | Nos.
2 | lts
2。材料表:
id | Material_name
1 | bricks
2 | Cement
3.大表:
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 | 2 | 100 | 1
预期结果如下:
Material Name | Unit | Total Qty | Total Consumed Qty | Stock
Bricks | Nos. | 300 | 50 | 250
Cement | Nos. | 600 | 100 | 500
因此,在上述结果中,总数量将从 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_id = sm.id
JOIN material_unit.mu ON g.unit = mu.id
GROUP by material_name
【问题讨论】:
您的查询引用了未显示的表。相反,您会显示不在查询中的表。 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出您可以给出的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 停止尝试编写您的总体目标并从给定的代码中解释您的期望以及原因。 【参考方案1】:这回答了问题的原始版本。
根据您的示例数据,我认为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 ;
如果任何表格的每种材料都有多行,那么这不是正确的解决方案。如果是这种情况,我建议您提出一个新问题,并提供适当的样本数据和所需的结果。
【讨论】:
是的 Gordon,我的表格包含多个条目并且需要按材料名称分组是正确的。但是我已经更正了我在原帖中提到的数据和查询 能否请您考虑对原始帖子的最新编辑,如果您可以提供帮助,请在此基础上进行编辑。 @MayurPatel 。 . .我想我很清楚你应该问一个新问题。以上是关于如何使用 SQL 查询将总数量和消耗数量转化为单个结果的主要内容,如果未能解决你的问题,请参考以下文章
使用 unpivot 将未知数量的列转换为行的动态 SQL 查询