Oracle
 sql >> Base de données >  >> RDS >> Oracle

Affichage des valeurs LISTAGG dans une cellule en fonction de la valeur d'une autre colonne

Votre mise à jour est équivalente à ceci.

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

Mais, je ne recommanderais pas cette. Le stockage des enregistrements sous forme de valeurs séparées par des virgules est susceptible de vous causer des problèmes à l'avenir. Utilisez-le uniquement pour afficher les résultats à l'aide d'une requête comme ci-dessous. Cela suppose que dans votre table de jours, il y a des lignes uniques pour chaque jour. S'il y a des doublons, join à l'ensemble de résultats distinct de jours.

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