-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
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 表中获取,总消耗量从消耗表中获取,而库存是两者的差异,应按材料名称分组。

下面的查询仅获取 Total Quantity 的结果,并且还需要您的帮助才能获取消耗的数量。

我是 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

4

1 回答 1

0

这回答了问题的原始版本。

根据您的样本数据,我认为 aGROUP 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 ;

如果任何表格中的每个材料都有多行,那么这将不是正确的解决方案。如果是这种情况,我建议您使用适当的样本数据和期望的结果提出一个新问题。

于 2020-05-02T12:10:48.847 回答