關於sql行轉列的理解
阿新 • • 發佈:2019-02-02
DELIMITER &&
CREATE PROCEDURE sp_count()
BEGIN
#課程名稱
DECLARE course_n VARCHAR(20);
#所有課程數量
DECLARE count INT;
#計數器
DECLARE i INT DEFAULT 0;
#拼接SQL字串
SET @s = 'SELECT name';
SET count = (SELECT COUNT(distinct course) FROM grade2);
WHILE i < count DO
SET course_n = (SELECT course FROM grade2 LIMIT i,1);
SET @s = CONCAT(@s, ', SUM(CASE course WHEN ','\'', course_n,'\'',' THEN score END )',' AS ','\'',course_n,'\'');
SET i = i+1;
END WHILE;
SET @s = CONCAT(@s, ' FROM grade2 GROUP BY name');
#用於除錯
#SELECT @s;
PREPARE stmt FROM @s;
EXECUTE stmt;
END
&&
call sp_count();
CREATE PROCEDURE sp_count()
BEGIN
#課程名稱
DECLARE course_n VARCHAR(20);
#所有課程數量
DECLARE count INT;
#計數器
DECLARE i INT DEFAULT 0;
#拼接SQL字串
SET @s = 'SELECT name';
SET count = (SELECT COUNT(distinct course) FROM grade2);
WHILE i < count DO
SET course_n = (SELECT course FROM grade2 LIMIT i,1);
SET @s = CONCAT(@s, ', SUM(CASE course WHEN ','\'', course_n,'\'',' THEN score END )',' AS ','\'',course_n,'\'');
SET i = i+1;
END WHILE;
SET @s = CONCAT(@s, ' FROM grade2 GROUP BY name');
#用於除錯
#SELECT @s;
PREPARE stmt FROM @s;
EXECUTE stmt;
END
&&
call sp_count();