Il s'agit d'une requête pivot standard :
SELECT uc.uut_sn,
MAX(CASE
WHEN uc.characteristic_name = 'char_name_1' THEN uc.characteristic_value
ELSE NULL
END) AS char_name_1,
MAX(CASE
WHEN uc.characteristic_name = 'char_name_2' THEN uc.characteristic_value
ELSE NULL
END) AS char_name_2,
MAX(CASE
WHEN uc.characteristic_name = 'char_name_3' THEN uc.characteristic_value
ELSE NULL
END) AS char_name_3,
FROM unit_characteristics uc
GROUP BY uc.uut_sn
Pour le rendre dynamique, vous devez utiliser Syntaxe SQL dynamique de MySQL appelée instructions préparées
. Il nécessite deux requêtes - la première obtient une liste de characteristic_name
valeurs, afin que vous puissiez concaténer la chaîne appropriée dans les expressions CASE comme vous le voyez dans mon exemple comme requête ultime.