sql >> Database teknologi >  >> RDS >> Oracle

Visning af LISTAGG-værdier i en celle baseret på værdien af ​​en anden kolonne

Din opdatering svarer til dette.

UPDATE schedules s 
SET    days = (SELECT LISTAGG(day, ', ') 
                        within group ( ORDER BY day_order ) 
               FROM   days d 
               WHERE  d.schedule IN ( 'Weekend', 'Weekday' ) 
                      AND d.schedule = s.schedule 
               GROUP  BY d.schedule ) ;

Men jeg vil ikke anbefale dette. Lagring af posterne som kommaseparerede værdier vil helt sikkert forårsage problemer for dig i fremtiden. Brug det kun til at vise resultaterne ved hjælp af en forespørgsel som nedenfor. Dette forudsætter, at der i din dagstabel er unikke rækker for hver dag. Hvis der er dubletter, join det til det distinkte resultatsæt fra dage.

SELECT d.id, 
       d.schedule, 
       LISTAGG(s.day, ', ') 
         within GROUP ( ORDER BY d.day_order ) 
FROM   days d 
       join schedules s 
         ON ( d.schedule = s.schedule ) 
WHERE  d.schedule IN ( 'Weekend', 'Weekday' ) 
GROUP  BY d.id, 
          d.schedule 


  1. Arranger forumindlæg efter tidspunktet for seneste svar

  2. Hvordan skriver man en indre forespørgsel, der returnerer den seneste besked for en given bruger?

  3. RegEx med preg_match for at finde og erstatte en LIGNENDE streng

  4. Sådan beregner du fastholdelse måned over måned ved hjælp af SQL