Mysql
 sql >> Base de données >  >> RDS >> Mysql

Besoin de convertir des colonnes en lignes dans MYSQL

Peut-être que la solution ci-dessous vous aide à résoudre votre problème, vous devez faire quelques changements selon la structure de votre table.

Pour cette solution, vous devez créer une procédure stockée.

S'il s'agit de la structure de votre table :

CREATE TABLE `school` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(500) DEFAULT NULL,
  `value` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS=1;

La solution ci-dessous fonctionne si ci-dessus est la structure de votre table.

   SET SESSION group_concat_max_len = (2056 * 2056);

SET @sql = NULL;

SELECT GROUP_CONCAT(DISTINCT
             CONCAT(
               'MAX(CASE WHEN school.name ="',m.name,'"'
                                ' THEN school.value END)"',m.name , '"'))
                                INTO @sql  
                                            from school as m;

SET @sql = CONCAT('SELECT value,',@sql,
                  ' FROM school');


PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Effectuez les modifications conformément à la structure de votre table.

Cette solution est également utile pour plusieurs tables, j'espère que cela pourra vous aider à résoudre votre problème.