Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle SQL - Convertir les valeurs de colonne de N lignes en N colonnes sur 1 ligne

En supposant que vous ne vous souciez pas de l'ordre dans lequel les descriptions sont renvoyées (c'est-à-dire que Jeremy Smith pourrait tout aussi bien avoir un Description1 ou "Confus" et une Description2 de "Tall"), il vous suffit de pivoter sur le numéro de ligne. Si vous vous souciez de l'ordre dans lequel les descriptions sont renvoyées, vous pouvez ajouter un ORDER BY clause à la fonction de fenêtre dans le ROW_NUMBER fonction analytique

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

En passant, j'espère que vous stockez réellement une date de naissance et calculez l'âge de la personne plutôt que de stocker l'âge et de supposer que les gens mettent à jour leur âge chaque année.