Как я могу сделать Sum Query для Mysql и двух таблиц - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужна помощь с одним запросом, я не знаю, как мне это сделать. у меня есть одна таблица (TblParts) с полями:

Code Stock Stock Replace

 1    10    0
 2     5    0
 3    15    0
 11    0    0
 22    0    0
 33    0    0

и другая таблица (TblSust) с полями

Code Replace

 1      11
 11      1
 2      22
 22      2

В этой таблице показан код замены каждого кода, например, если у меня нет запаса кода 1, я могу использовать запас кода 11 и наоборот.

Мне нужен запрос добавить в каждый TblParts.stockreplace (только там, где TblParts.stock = 0) сумму TblParts.stock где TblSust.code = TblParts.code

Пример. Результат TblParts будет:

Code Stock StockReplace

1      10     0
2      5      0
3      15     0
11     0     10
22     0     5
33     0     0

Но если у меня есть две замены между каждой, я должен суммировать каждую и положить в TblParts.replacestock сумму.

Какая-нибудь помощь, чтобы сделать это? Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Присоедините tblparts к запросу, который вычисляет сумму:

update tblparts p
inner join (
  select s.code, sum(p.stock) total
  from tblsust s 
  inner join tblparts p on s.replace = p.code
  group by s.code
) t on t.code = p.code  
set p.stockreplace = t.total
where p.stockreplace = 0;

См. demo . Результаты:

| Code | Stock | StockReplace |
| ---- | ----- | ------------ |
| 1    | 10    | 0            |
| 2    | 5     | 0            |
| 3    | 15    | 0            |
| 11   | 0     | 10           |
| 22   | 0     | 5            |
| 33   | 0     | 0            |
0 голосов
/ 22 апреля 2020

Присоединитесь к таблицам и используйте коррелированный подзапрос, чтобы получить замену. Примечание. Я изменил ваши образцы данных.

drop table if exists tblparts,tblsust;
create table tblparts
(Code int, Stock int, StockReplace int);
insert into tblparts values
( 1  ,   0  ,  0),
( 2  ,   5  ,  0),
( 3  ,  15  ,  0),
( 11 ,  10  ,  0),
( 22 ,   0  ,  0),
( 33 ,   0  ,  0);

create Table TblSust
(Code int, `Replace` int);
insert into tblsust values
( 1   ,   11),
( 11  ,    1),
( 2   ,   22),
( 22  ,    2);

select p.code,p.stock,
        coalesce(
        (select p1.stock from tblparts p1 where p1.code = s.`replace`) 
        ,0) r
from tblparts p
left join tblsust s on s.code = p.code
order by p.code
;

+------+-------+------+
| code | stock | r    |
+------+-------+------+
|    1 |     0 |   10 |
|    2 |     5 |    0 |
|    3 |    15 |    0 |
|   11 |    10 |    0 |
|   22 |     0 |    5 |
|   33 |     0 |    0 |
+------+-------+------+
6 rows in set (0.001 sec)

replace - зарезервированное слово, поэтому здесь ставится обратная галочка.

Если есть многократные замены суммируют стоимость акций и затем присоединяются

create table tblparts
(Code int, Stock int, StockReplace int);
insert into tblparts values
( 1  ,   0  ,  0),
( 2  ,   5  ,  0),
( 3  ,  15  ,  0),
( 11 ,  10  ,  0),
( 15 ,   2  ,  0),
( 22 ,   0  ,  0),
( 33 ,   0  ,  0);

create Table TblSust
(Code int, `Replace` int);
insert into tblsust values
( 1   ,   11),
( 11  ,    1),
( 2   ,   22),
( 22  ,    2),
(  1  ,   15);

select p.code,p.stock,
        coalesce(
        s.stockreplace
        ,0) r
from tblparts p
left join 
(select s.code, sum(stock) stockreplace
from tblsust s
join tblparts p  on s.`replace`= p.code
group by s.code
order by p.code
) s on p.code = s.code
;

+------+-------+------+
| code | stock | r    |

+------+-------+------+
|    1 |     0 |   12 |
|    2 |     5 |    0 |
|    3 |    15 |    0 |
|   11 |    10 |    0 |
|   15 |     2 |    0 |
|   22 |     0 |    5 |
|   33 |     0 |    0 |
+------+-------+------+
7 rows in set (0.001 sec)
...