加入 3 个表,从 2 个不同的表和按材料名称分组的总数量

Posted

技术标签:

【中文标题】加入 3 个表,从 2 个不同的表和按材料名称分组的总数量【英文标题】:Join 3 tables, sum qty from 2 different tables and Group By material name 【发布时间】:2020-05-02 14:09:09 【问题描述】:

我有以下表格

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

【问题讨论】:

【参考方案1】:
Select sm.material_name as 'Material_Name', --mu.unit_name as 'Unit Name' ,
 sum(g.qty) as 'Total_Qty', sum(co.total_consumed_qty) as 'Tot_Con_Qty',
 sum(g.qty) - sum(co.total_consumed_qty) as stock
from grn g
JOIN material_table sm ON g.material_id = sm.id
JOIN material_unit mu ON g.unit = mu.id
JOIN consumption co ON co.material_id = g.material_id
GROUP by material_name

这是你所期待的吗?请检查查询中的列名并尝试。

【讨论】:

所需输出在 Total_Qty 和 Tot_Con_Qty 下给出双重计数。 Bricks 的 Total_Qty 返回 600 而不是 300,Total_Con_Qty 返回 100 而不是 50。 那么请检查你的加入条件,有些地方你使用了不正确的加入 JOIN 条件与您提到的完全相同。我已经仔细检查了。

以上是关于加入 3 个表,从 2 个不同的表和按材料名称分组的总数量的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询加入不同的表和计数

加入和分组依据 - 选择列表中的列无效

使用 2 个表和 3 个日期字段连接以降序获取多个日期的问题

laravel 查询 - 加入 2 个表和 groupBy 相同的 ID

在 2 个不同的服务器上加入 2 个表

SQL - 加入 t1.value 与 t2.column 名称匹配的表?