Assumindo que você não se importa com a ordem em que as descrições são retornadas (ou seja, Jeremy Smith poderia ter um
Description1
corretamente ou "Confuso" e uma Description2
de "Alto"), você só precisa girar o número da linha. Se você se preocupa com a ordem em que as descrições são retornadas, você pode adicionar um ORDER BY
cláusula para a função de janela no ROW_NUMBER
função 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
Como um aparte, espero que você esteja realmente armazenando uma data de nascimento e computando a idade da pessoa em vez de armazenar a idade e assumir que as pessoas estão atualizando sua idade todos os anos.