有一个以下表格字段为ID,2023-1-1,2023-1-2.需要将2023-1-1列转为行,如id,2023-1,100的行形式,使用mysql存储过程
时间: 2024-05-31 22:08:51 浏览: 63
sql列转行以及行转列的通用存储过程
4星 · 用户满意度95%
以下是将2023-1-1列转为行的存储过程示例:
DELIMITER $$
CREATE PROCEDURE `pivot_table`()
BEGIN
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN date = ''', date, ''' THEN value END) AS `', date, '`')
) INTO @sql
FROM your_table;
SET @sql = CONCAT('SELECT id, SUBSTRING(date, 1, 7) AS month, ', @sql, ' FROM your_table GROUP BY id, month');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
在此存储过程中,我们首先声明一个变量@sql,并使用GROUP_CONCAT函数将我们需要转换为列的日期值动态地构建为一个字符串。然后,我们将该字符串与必要的SELECT语句组合起来,并将其准备为语句,并使用EXECUTE语句执行该语句。最后,我们使用DEALLOCATE PREPARE语句清除该语句的准备情况。
阅读全文