Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle SQL - Konvertieren Sie die Spaltenwerte von N Zeilen in N Spalten in 1 Zeile

Angenommen, es ist Ihnen egal, in welcher Reihenfolge die Beschreibungen zurückgegeben werden (d. h. Jeremy Smith könnte genauso gut eine Description1 haben oder "Verwirrt" und eine Description2 von "Tall"), müssen Sie nur auf die Zeilennummer schwenken. Wenn Ihnen die Reihenfolge wichtig ist, in der die Beschreibungen zurückgegeben werden, können Sie einen ORDER BY hinzufügen -Klausel zur Fensterfunktion in ROW_NUMBER Analysefunktion

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

Abgesehen davon hoffe ich, dass Sie tatsächlich ein Geburtsdatum speichern und das Alter der Person berechnen, anstatt das Alter zu speichern und anzunehmen, dass die Leute ihr Alter jedes Jahr aktualisieren.