sql >> Databasteknik >  >> RDS >> Oracle

Oracle SQL - Konvertera N raders kolumnvärden till N kolumner i 1 rad

Förutsatt att du inte bryr dig i vilken ordning beskrivningarna returneras i (dvs. Jeremy Smith kan lika korrekt ha en Description1 eller "Förvirrad" och en Description2 av "Tall") behöver du bara vrida på radnumret. Om du bryr dig om beställningen beskrivningarna returneras i kan du lägga till en ORDER BY sats till fönsterfunktionen i ROW_NUMBER analytisk funktion

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

För övrigt hoppas jag att du faktiskt lagrar ett födelsedatum och beräknar personens ålder snarare än att lagra åldern och anta att folk uppdaterar sin ålder varje år.



  1. Bästa metoder för skalning av databaser:del två

  2. aggregering av en tom resultatuppsättning

  3. Länka django- och mysql-behållare med docker-compose

  4. SQL Server-felhantering:undantag och databasklientkontraktet