Ce n'est pas très joli (mais les données ne le sont pas non plus), mais cela fonctionnera si les noms de vos colonnes sont connus lorsque vous écrivez la requête :
SELECT
RecordId,
group_concat( if( FieldName = 'name', FieldValue, '' ) SEPARATOR '' ) AS person_name,
group_concat( if( FieldName = 'age', FieldValue, '' ) SEPARATOR '' ) AS person_age
FROM test_table
GROUP BY RecordId
(fonctionne dans MySQL 5.0)
Vous devez également utiliser CAST pour que les champs soient du bon type.
Si vous ne connaissez pas les champs, vous devrez (par programmation) effectuer une sélection distincte de NomChamps au préalable afin de construire votre requête.
J'ai l'impression que le kit de création de contenu (CCK) de Drupal fait quelque chose de similaire à ceci