sql >> Database >  >> RDS >> Mysql

Noodzaak om kolommen in rijen te converteren in MYSQL

Mogelijk helpt de onderstaande oplossing u om uw probleem op te lossen, u moet enkele wijzigingen aanbrengen volgens uw tabelstructuur.

Voor deze oplossing moet je een opgeslagen procedure maken.

Als dit uw tabelstructuur is:

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;

Onderstaande oplossing werkt als bovenstaande uw tabelstructuur is.

   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;

Breng wijzigingen aan volgens uw tabelstructuur.

Deze oplossing is ook nuttig voor meerdere tabellen, ik hoop dat dit u kan helpen om uw probleem op te lossen.




  1. Een database automatisch comprimeren en repareren in Access 2016

  2. Tijdreeksgegevens efficiënt opslaan:mySQL of platte bestanden? Veel tabellen (of bestanden) of queries met de WHERE-voorwaarde?

  3. Mysql Vergelijk twee datetime-velden

  4. Mysql int(11) nummer buiten bereik