Dengan asumsi bahwa Anda tidak peduli dengan urutan apa deskripsi dikembalikan (mis. Jeremy Smith dapat dengan benar memiliki Description1
atau "Bingung" dan Description2
dari "Tinggi"), Anda hanya perlu memutar nomor baris. Jika Anda peduli dengan urutan deskripsi yang dikembalikan, Anda dapat menambahkan ORDER BY
klausa ke fungsi jendela di ROW_NUMBER
fungsi analitik
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
Selain itu, saya berharap Anda benar-benar menyimpan tanggal lahir dan menghitung usia orang tersebut daripada menyimpan usia dan berasumsi bahwa orang memperbarui usia mereka setiap tahun.