Förutsatt att du inte bryr dig i vilken ordning beskrivningarna returneras i (dvs. Jeremy Smith kan lika korrekt ha en Description1
eller "Förvirrad" och en Description2
av "Tall") behöver du bara vrida på radnumret. Om du bryr dig om beställningen beskrivningarna returneras i kan du lägga till en ORDER BY
sats till fönsterfunktionen i ROW_NUMBER
analytisk funktion
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
För övrigt hoppas jag att du faktiskt lagrar ett födelsedatum och beräknar personens ålder snarare än att lagra åldern och anta att folk uppdaterar sin ålder varje år.