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

konwersja wiersza do kolumny w mysql

Ten rodzaj transformacji danych jest znany jako przestawka . MySQL nie ma funkcji przestawnej, więc będziesz chciał przekształcić dane za pomocą funkcji agregującej z CASE wyrażenie.

Jeśli znasz z wyprzedzeniem wartości do przekształcenia, możesz je zakodować na stałe w podobny sposób:

select studentid,
  sum(case when subject = 'Java' then mark else 0 end) Java,
  sum(case when subject = 'C#' then mark else 0 end) `C#`,
  sum(case when subject = 'JavaScript' then mark else 0 end) JavaScript
from yourtable
group by studentid

Zobacz Skrzypce SQL z wersją demonstracyjną .

Jeśli wartości tematu są nieznane lub elastyczne, możesz użyć przygotowanej instrukcji do wygenerowania dynamicznego sql:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'sum(case when subject = ''',
      subject,
      ''' then mark else 0 end) AS `',
      subject, '`'
    )
  ) INTO @sql
FROM  yourtable;

SET @sql = CONCAT('SELECT studentid, ', @sql, ' 
                  from yourtable
                  group by studentid');

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

Zobacz Skrzypce SQL z wersją demonstracyjną .

Wynik dla obu zapytań to:

| STUDENTID | JAVA | C# | JAVASCRIPT |
--------------------------------------
|        10 |   46 | 65 |         79 |
|        11 |   66 | 85 |         99 |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaznaczanie wszystkich elementów w jednej tabeli i łączenie z inną tabelą, pozwalając na wartości null

  2. Automatyczna aktualizacja stanu pola Tabe sprawdzająca datę systemową za pomocą zapytania w mysql i java

  3. Preferowane narzędzia MySQL

  4. Strategia synchronizacji bazy danych z wielu lokalizacji do centralnej bazy danych i odwrotnie

  5. Mysql -- Ostatnie 30 dni