Suponiendo que no le importa en qué orden se devuelven las descripciones (es decir, Jeremy Smith podría tener correctamente un Description1
o "Confundido" y una Description2
de "Alto"), solo necesita pivotar en el número de fila. Si le importa el orden en que se devuelven las descripciones, puede agregar un ORDER BY
cláusula a la función de ventana en el ROW_NUMBER
función analítica
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
Aparte, espero que realmente almacene una fecha de nacimiento y calcule la edad de la persona en lugar de almacenar la edad y asumir que las personas actualizan su edad todos los años.