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

mysql vælg dynamiske rækkeværdier som kolonnenavne, en anden kolonne som værdi

I modsætning til nogle andre RDBMS har MySQL ikke indbygget understøttelse af pivotering af denne slags efter design (Udviklerne føler, at det er mere egnet til præsentationen i stedet for databaselaget i din applikation).

Hvis du absolut skal udføre sådanne manipulationer i MySQL, er opbygningen af ​​en forberedt erklæring vejen at gå – dog snarere end at rode rundt med CASE , ville jeg nok bare bruge MySQL's GROUP_CONCAT() funktion:

SELECT CONCAT( 'SELECT `table`.id', GROUP_CONCAT(' , `t_', REPLACE(name, '`', '``'), '`.value AS `', REPLACE( navn, '`', '``'), '`' SEPARATOR ''), ' FRA `table` ', GROUP_CONCAT(' LEFT JOIN `tabel` SOM `t_', REPLACE(navn, '`', '` `'), '` PÅ `table`.id =`t_', REPLACE(navn, '`', '``'), '`.id OG `t_', REPLACE(navn, '`', '` `'), '`.name =', CITAT(navn) SEPARATOR ''), ' GRUPPER EFTER `table`.id') INTO @qry FROM (VÆLG DISTINKT navn FRA `table`) t;PREPARE stmt FROM @qry;EXECUTE stmt;

Se den på sqlfiddle .

Bemærk, at resultatet af GROUP_CONCAT() er begrænset af group_concat_max_len variabel (standard på 1024 bytes:er usandsynligt relevant her, medmindre du har et ekstremt langt navn værdier).




  1. Skift PostgreSql-databasekodning

  2. Sådan opretter du Snapshot-replikering

  3. Hvad returnerer en vellykket MySQL DELETE? Hvordan kontrollerer man, om SLETNING lykkedes?

  4. Ryd Hibernate 2. niveaus cache efter manuel DB-opdatering