sql >> Databasteknik >  >> RDS >> Mysql

Behöver konvertera kolumner till rader i MYSQL

Kan vara nedan lösning hjälpa dig att lösa ditt problem, du måste göra några ändringar enligt din tabellstruktur.

För denna lösning måste du göra en lagrad procedur.

Om detta är din tabellstruktur:

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;

Nedanstående lösning fungerar om ovan är din tabellstruktur.

   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;

Gör ändringar enligt din tabellstruktur.

Den här lösningen är också användbar för flera tabeller, jag hoppas att detta kan hjälpa dig att lösa ditt problem.




  1. Introduktion till SQL

  2. Mysql:BYT DAMN TABELL OM FINNS

  3. PDO var rader som påverkades under exekveringssatsen

  4. Hur Round() fungerar i SQLite