我有物品移动到和从库存表和报告表。
动作表:<>之前------------------------------------Id | part_number | amount | code |------------------------------------101 | 3-80-75 | 55 | 2102 | 5-88-70米| -65 | 1103 | 1-46-57 | 11 | 1104 | 3-80-75 | -8 | 2105 | 5-51-54 | 76 | 2106 | 3-80-75 | -22 |107 | 5-51-54 | 62 | 1108 | 1-46-57 | 3 | 2109 | 3-80-75 | -16 |-----------------------------------之前
报告表:<>之前----------------------------------Id | part_number | total_code2 |----------------------------------456 | 3-80-75 |457 | 5-88-70米|[1-46-57]459 | 3-80-75 |460 | 5-51-54 |----------------------------------之前
我只需要用代码2的总和来更新报表,对于每个零件编号。
结果应该是这样的:
<>之前----------------------------------Id | part_number | total_code2 |----------------------------------456 | 3-80-75 | 31457 | 5-88-70米| 0458 | 1-46-57 | 3459 | 3-80-75 | -24460 | 5-51-54 | 76----------------------------------据我所知,您希望对具有code = 2
的数字的代码求和。您可以使用一个sql查询和内部连接来实现:
UPDATE report r
JOIN
(
SELECT part_number, SUM(code) total_code
FROM movements
WHERE code = 2
) m
ON m.part_number = r.part_number
SET total_code2 = m.total_code
问题中所示的报表表有至少一个部分的两行
所以我在报表中添加了一个代码列。
仅根据代码2更新了3行。
在允许问题混乱之后匹配预期结果,imho
DDL:create table movements
( id int not null,
part_number varchar(40) not null,
amount int not null,
code int not null
);
-- truncate table movements;
insert movements (id,part_number,amount,code) values (101,'3-80-75',55,2);
insert movements (id,part_number,amount,code) values (102,'5-88-70M',-65,1);
insert movements (id,part_number,amount,code) values (103,'1-46-57',11,1);
insert movements (id,part_number,amount,code) values (104,'3-80-75',-8,2);
insert movements (id,part_number,amount,code) values (105,'5-51-54',76,2);
insert movements (id,part_number,amount,code) values (106,'3-80-75',-22,1);
insert movements (id,part_number,amount,code) values (107,'5-51-54',62,1);
insert movements (id,part_number,amount,code) values (108,'1-46-57',-3,2);
insert movements (id,part_number,amount,code) values (109,'3-80-75',-16,2);
create table report
( id int not null,
part_number varchar(40) not null,
code int not null,
total_code2 int not null
);
-- truncate table report;
insert report (id,part_number,code,total_code2) values (456,'3-80-75',2,0);
insert report (id,part_number,code,total_code2) values (458,'1-46-57',2,0);
insert report (id,part_number,code,total_code2) values (460,'5-51-54',2,0);
更新:UPDATE report r
JOIN
( SELECT part_number, SUM(amount) total_code
FROM movements
WHERE code = 2
group by part_number
) m
ON m.part_number = r.part_number
SET total_code2 = m.total_code
where r.code=2 -- <----- only update code 2
结果:
select * from report;
+-----+-------------+------+-------------+
| id | part_number | code | total_code2 |
+-----+-------------+------+-------------+
| 456 | 3-80-75 | 2 | 31 |
| 458 | 1-46-57 | 2 | -3 |
| 460 | 5-51-54 | 2 | 76 |
+-----+-------------+------+-------------+
3 rows in set (0.00 sec)