Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie Mysql do dynamicznej konwersji wierszy na kolumny

Możesz użyć GROUP BY i MAX do symulacji obrotu. MySQL obsługuje również IF oświadczenie.

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

Jeśli masz wiele wartości order , bardziej odpowiedni może być dynamiczny SQL, aby nie trzeba było modyfikować zapytania:

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;

WYJŚCIE OBU ZAPYTAŃ:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Polecenia INSERT lub REPLACE MySQL

  2. Porównaj daty w MySQL

  3. Jak zmienić rozmiar kolumny w MySQL?

  4. jak rzutować szesnastkowy na varchar(datetime)?

  5. Zmień nazwę kolumny w MySQL