我在库存表中有物品移动 和报告表。
动作表:
------------------------------------ id | part_number | amount | code | ------------------------------------ 101 | 3-80-75 | 55 | 2 102 | 5-88-70M | -65 | 1 103 | 1-46-57 | 11 | 1 104 | 3-80-75 | -8 | 2 105 | 5-51-54 | 76 | 2 106 | 3-80-75 | -22 | 1 107 | 5-51-54 | 62 | 1 108 | 1-46-57 | -3 | 2 109 | 3-80-75 | -16 | 2 -----------------------------------
报告表:
---------------------------------- id | part_number | total_code2 | ---------------------------------- 456 | 3-80-75 | 457 | 5-88-70M | 458 | 1-46-57 | 459 | 3-80-75 | 460 | 5-51-54 | ----------------------------------
我需要使用代码2的总和来更新报表, 对于每个零件号。
结果必须是这样的:
---------------------------------- id | part_number | total_code2 | ---------------------------------- 456 | 3-80-75 | 31 457 | 5-88-70M | 0 458 | 1-46-57 | -3 459 | 3-80-75 | -24 460 | 5-51-54 | 76 ----------------------------------
答案 0 :(得分:3)
据我所知,您想要对具有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
答案 1 :(得分:1)
所以我在报告表中添加了一个代码列。
根据代码2仅更新3行。
在允许问题snafu,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)