sql >> Base de Datos >  >> RDS >> Oracle

Oracle SQL:convierta los valores de columna de N filas en N columnas en 1 fila

Suponiendo que no le importa en qué orden se devuelven las descripciones (es decir, Jeremy Smith podría tener correctamente un Description1 o "Confundido" y una Description2 de "Alto"), solo necesita pivotar en el número de fila. Si le importa el orden en que se devuelven las descripciones, puede agregar un ORDER BY cláusula a la función de ventana en el ROW_NUMBER función 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

Aparte, espero que realmente almacene una fecha de nacimiento y calcule la edad de la persona en lugar de almacenar la edad y asumir que las personas actualizan su edad todos los años.