Как получить общее количество и использованное количество в единичных результатах, используя запрос SQL - PullRequest
0 голосов
/ 02 мая 2020

У меня ниже таблицы

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 Ответ

0 голосов
/ 02 мая 2020

Это отвечает на оригинальную версию вопроса.

На основании ваших примеров данных, я не думаю, что 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 ;

Если в какой-либо из таблиц имеется несколько строк на материал, это не будет правильным решением. Если это так, я бы предложил вам задать новый вопрос с соответствующими образцами данных и желаемыми результатами.

...