Supponendo che non ti importi in quale ordine vengono restituite le descrizioni (ad es. Jeremy Smith potrebbe avere altrettanto correttamente una Description1
o "Confuso" e un Description2
di "Tall"), devi solo ruotare sul numero di riga. Se ti interessa l'ordine in cui vengono restituite le descrizioni, puoi aggiungere un ORDER BY
clausola alla funzione window nel ROW_NUMBER
funzione analitica
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
Per inciso, spero che tu stia effettivamente memorizzando una data di nascita e calcolando l'età della persona invece di memorizzare l'età e presumere che le persone aggiornino la loro età ogni anno.