Ако приемем, че не ви интересува в какъв ред се връщат описанията (т.е. Джереми Смит може също толкова правилно да има Description1
или „Объркан“ и Description2
на „Висок“), просто трябва да завъртите номера на реда. Ако ви интересува редът, в който се връщат описанията, можете да добавите ORDER BY
клауза към функцията прозорец в ROW_NUMBER
аналитична функция
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
Настрана, надявам се, че всъщност съхранявате рождена дата и изчислявате възрастта на човека, вместо да съхранявате възрастта и да приемате, че хората актуализират възрастта си всяка година.