Za předpokladu, že je vám jedno, v jakém pořadí jsou popisy vráceny (tj. Jeremy Smith by mohl mít stejně správně Description1
nebo "Confused" a Description2
z "Tall"), stačí se otočit na číslo řádku. Pokud vám záleží na pořadí, ve kterém jsou popisy vráceny, můžete přidat ORDER BY
klauzule k funkci okna v ROW_NUMBER
analytická funkce
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
Kromě toho doufám, že ve skutečnosti ukládáte datum narození a vypočítáváte věk dané osoby, spíše než abyste ukládali věk a předpokládali, že lidé svůj věk každý rok aktualizují.