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

Anzeigen von LISTAGG-Werten in einer Zelle basierend auf dem Wert einer anderen Spalte

Ihre Aktualisierung entspricht dieser.

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 ) ;

Aber ich würde nicht empfehlen Dies. Das Speichern der Datensätze als kommagetrennte Werte wird Ihnen in Zukunft sicher Probleme bereiten. Verwenden Sie es nur, um die Ergebnisse mit einer Abfrage wie unten anzuzeigen. Dies setzt voraus, dass es in Ihrer Tagestabelle eindeutige Zeilen für jeden Tag gibt. Wenn es Duplikate gibt, join es in die eindeutige Ergebnismenge von Tagen.

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