sql >> Database >  >> RDS >> Oracle

Oracle SQL - Converteer kolomwaarden van N rijen naar N kolommen in 1 rij

Ervan uitgaande dat het u niet uitmaakt in welke volgorde de beschrijvingen worden geretourneerd (d.w.z. Jeremy Smith zou net zo goed een Description1 kunnen hebben of "Verward" en een Description2 van "Tall"), hoeft u alleen maar op het rijnummer te draaien. Als je geeft om de volgorde waarin de beschrijvingen worden geretourneerd, kun je een ORDER BY . toevoegen clausule toe aan de vensterfunctie in de ROW_NUMBER analytische functie

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

Even terzijde, ik hoop dat je een geboortedatum opslaat en de leeftijd van de persoon berekent in plaats van de leeftijd op te slaan en ervan uit te gaan dat mensen hun leeftijd elk jaar bijwerken.



  1. MySQL str_to_date probleem

  2. Hoe de door het systeem gegenereerde controlebeperkingsnaam van de tabelkolom in Oracle op te halen

  3. transactie time-out werkt niet in slaapstand met oracle

  4. Hoe MySQL te configureren om hoofdlettergevoelig te zijn