sql >> Databáze >  >> RDS >> Mysql

převod řádků na sloupec v mysql

Tento typ transformace dat se nazývá pivot . MySQL nemá funkci pivot, takže budete chtít transformovat data pomocí agregační funkce s CASE výraz.

Pokud znáte hodnoty předem pro transformaci, můžete je napevno zakódovat podobně jako toto:

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

Viz SQL Fiddle s ukázkou .

Pokud jsou hodnoty předmětu neznámé nebo flexibilní, možná budete chtít použít připravený příkaz ke generování dynamického 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;

Viz SQL Fiddle s ukázkou .

Výsledek pro oba dotazy je:

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



  1. Převeďte sloupec varchar na datum v mysql na úrovni databáze

  2. MySql C++ konektor getString() nefunguje správně, zatímco getInt funguje perfektně

  3. Může operátor IN používat LIKE-wildcards (%) v Oracle?

  4. 6 důvodů, proč může Microsoft Access pomoci vaší firmě