以下过程几乎可以正常运行,只有一个例外。第一个选择返回两个记录。但是,在循环中,它会构建三种情况,好像它进行了三遍一样。无法解决。我看不到的明显的东西。
DECLARE DTE DATE;
DECLARE EXIT_LOOP BOOLEAN;
DECLARE DATECURSOR CURSOR FOR
SELECT DISTINCT DATE
FROM SCHEDULE
WHERE BKFST > 0;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET EXIT_LOOP = TRUE;
OPEN DATECURSOR;
SET @s = '';
DATE_LOOP: LOOP
FETCH DATECURSOR INTO DTE;
SET @s = CONCAT(@s,CONCAT('SUM(CASE WHEN SCHEDULE.DATE =', "'", DTE, "'", ' THEN SCHEDULE.', _TYPE,' END) AS ', "'", DTE ,"', "));
IF EXIT_LOOP THEN
CLOSE DATECURSOR;
LEAVE DATE_LOOP;
END IF;
END LOOP DATE_LOOP;
SET @s = TRIM(trailing ', ' from @s);
SET @q = CONCAT('SELECT MOW_ID, FUNDING, ',@s,' FROM SCHEDULE GROUP BY MOW_ID, FUNDING');
SELECT @q;
PREPARE stmt1 FROM @q;
EXECUTE stmt1;
commit;
DEALLOCATE PREPARE stmt1;