MySQL中的动态纵表变横表是指将一个纵向存储数据的表(即每一列代表一个属性,每一行代表一个记录)转换为横向存储数据的表(即每一行代表一个属性,每一列代表一个记录)。这种转换通常用于数据分析和报表生成,以便更方便地查看和处理数据。
假设我们有一个纵向存储的表 user_info:
CREATE TABLE user_info (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
gender CHAR(1),
email VARCHAR(100)
);我们可以使用动态SQL将其转换为横向表结构:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(`column` = ''', `column`, '')) AS `', `column`, ''''))
INTO @sql
FROM (
SELECT `column`
FROM (
SELECT 'id' AS `column`
UNION ALL SELECT 'name'
UNION ALL SELECT 'age'
UNION ALL SELECT 'gender'
UNION ALL SELECT 'email'
) AS tmp
) AS subquery;
SET @sql = CONCAT('SELECT ', @sql, ' FROM (SELECT * FROM user_info) AS t GROUP BY id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;通过上述方法,你可以将MySQL中的纵向表转换为横向表,以便更方便地进行数据分析和报表生成。