Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle SQL - Converter valores de coluna de N linhas em N colunas em 1 linha


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.