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).