En supposant que vous ne vous souciez pas de l'ordre dans lequel les descriptions sont renvoyées (c'est-à-dire que Jeremy Smith pourrait tout aussi bien avoir un Description1
ou "Confus" et une Description2
de "Tall"), il vous suffit de pivoter sur le numéro de ligne. Si vous vous souciez de l'ordre dans lequel les descriptions sont renvoyées, vous pouvez ajouter un ORDER BY
clause à la fonction de fenêtre dans le ROW_NUMBER
fonction analytique
SELECT firstName,
lastName,
MAX( CASE WHEN rn = 1 THEN description ELSE NULL END ) description1,
MAX( CASE WHEN rn = 2 THEN description ELSE NULL END ) description2,
MAX( CASE WHEN rn = 3 THEN description ELSE NULL END ) description3
FROM (SELECT firstName,
lastName,
description,
row_number() over (partition by lastName, firstName) rn
FROM descriptions
JOIN people USING (firstName, lastName)
WHERE age >= 25)
GROUP BY firstname, lastname
En passant, j'espère que vous stockez réellement une date de naissance et calculez l'âge de la personne plutôt que de stocker l'âge et de supposer que les gens mettent à jour leur âge chaque année.