sql >> Database teknologi >  >> RDS >> Mysql

Mysql-forespørgsel til dynamisk at konvertere rækker til kolonner

Du kan bruge GROUP BY og MAX at simulere pivot. MySQL understøtter også IF erklæring.

SELECT ID, MAX(IF(`order` =1, data, NULL)) data1, MAX(IF(`order` =2, data, NULL)) data2FROM TableAGROUP BY ID 

Hvis du har flere værdier af orden , dynamisk SQL kan være mere passende, så du ikke behøver at ændre forespørgslen:

SET @sql =NULL;SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(`order` =', `order`, ',data,NULL)) AS data', `order`) ) INTO @sqlFROM TableName;SET @sql =CONCAT('SELECT ID, ', @sql, ' FROM TableName GROUP BY ID');PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt; 

OUTPUT AF BEGGE FORESPØRGSEL:

╔════╦═══════╦═══════╗║ ID ║ DATA1 ║ DATA2 ║════════════ ══════╣║ 1 ║ P ║ S ║║ 2 ║ R ║ Q ║╚════╩═════════════-kode

  1. Ret "profilnavn er ikke gyldigt" ved afsendelse af e-mail fra SQL Server

  2. Sender flere værdier i en enkelt parameter

  3. liste Postgres ENUM type

  4. Opdateringer fra Microsoft Access-teamet (juni 2017)