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

Requête MySQL pour convertir dynamiquement des lignes en colonnes

Vous pouvez utiliser GROUP BY et MAX pour simuler le pivot. MySQL prend également en charge IF déclaration.

SELECT  ID,
        MAX(IF(`order` = 1, data, NULL)) data1,
        MAX(IF(`order` = 2, data, NULL)) data2
FROM    TableA
GROUP   BY ID

Si vous avez plusieurs valeurs de order , le SQL dynamique peut être plus approprié pour ne pas avoir à modifier la requête :

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`)
  ) INTO @sql
FROM TableName;

SET @sql = CONCAT('SELECT  ID, ', @sql, ' 
                  FROM    TableName
                  GROUP   BY ID');

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

SORTIE DES DEUX REQUÊTES :

╔════╦═══════╦═══════╗
║ ID ║ DATA1 ║ DATA2 ║
╠════╬═══════╬═══════╣
║  1 ║ P     ║ S     ║
║  2 ║ R     ║ Q     ║
╚════╩═══════╩═══════╝