Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle SQL - Converti i valori di colonna di N righe in N colonne in 1 riga

Supponendo che non ti importi in quale ordine vengono restituite le descrizioni (ad es. Jeremy Smith potrebbe avere altrettanto correttamente una Description1 o "Confuso" e un Description2 di "Tall"), devi solo ruotare sul numero di riga. Se ti interessa l'ordine in cui vengono restituite le descrizioni, puoi aggiungere un ORDER BY clausola alla funzione window nel ROW_NUMBER funzione analitica

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

Per inciso, spero che tu stia effettivamente memorizzando una data di nascita e calcolando l'età della persona invece di memorizzare l'età e presumere che le persone aggiornino la loro età ogni anno.