存储过程实现根据setcode和task_id 分组,统计sz_autoinspect_yc表里的总数,赋值到对应的sz_autoinspect_task表里T_TOTAL_ABNORMAL(总问题数)字段; 统计sfcl为是的条数,赋值到sz_autoinspect_task表T_TOTAL_PROCESS(总处理数)字段。
时间: 2023-08-12 11:06:35 浏览: 58
存储过程实现报表数据生成
3星 · 编辑精心推荐
好的,根据您的要求,可以使用如下存储过程实现:
```mysql
DELIMITER $$
CREATE PROCEDURE update_task_counts()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE s VARCHAR(10);
DECLARE t VARCHAR(20);
DECLARE cur CURSOR FOR SELECT DISTINCT setcode, task_id FROM sz_autoinspect_yc;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO s, t;
IF done THEN
LEAVE read_loop;
END IF;
UPDATE sz_autoinspect_task AS task
SET T_TOTAL_ABNORMAL = (
SELECT COUNT(*) FROM sz_autoinspect_yc AS yc
WHERE yc.setcode = s AND yc.task_id = t
),
T_TOTAL_PROCESS = (
SELECT COUNT(*) FROM sz_autoinspect_yc AS yc
WHERE yc.setcode = s AND yc.task_id = t AND yc.sfcl = '是'
)
WHERE task.setcode = s AND task.task_id = t;
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
```
这个存储过程中,我们使用了一个游标来循环遍历sz_autoinspect_yc表中所有不同的setcode和task_id组合,并根据这些组合更新对应的sz_autoinspect_task表中的T_TOTAL_ABNORMAL和T_TOTAL_PROCESS字段。其中,游标中的条件是根据setcode和task_id进行筛选的。
阅读全文