Ervan uitgaande dat het u niet uitmaakt in welke volgorde de beschrijvingen worden geretourneerd (d.w.z. Jeremy Smith zou net zo goed een Description1
kunnen hebben of "Verward" en een Description2
van "Tall"), hoeft u alleen maar op het rijnummer te draaien. Als je geeft om de volgorde waarin de beschrijvingen worden geretourneerd, kun je een ORDER BY
. toevoegen clausule toe aan de vensterfunctie in de ROW_NUMBER
analytische functie
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
Even terzijde, ik hoop dat je een geboortedatum opslaat en de leeftijd van de persoon berekent in plaats van de leeftijd op te slaan en ervan uit te gaan dat mensen hun leeftijd elk jaar bijwerken.