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

Visualizzazione dei valori LISTAGG in una cella in base al valore di un'altra colonna

Il tuo aggiornamento equivale a questo.

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

Ma io non lo consiglierei questo. La memorizzazione dei record come valori separati da virgola è destinata a causare problemi in futuro. Usalo solo per visualizzare i risultati utilizzando una query come di seguito. Ciò presuppone che nella tabella dei giorni ci siano righe univoche per ogni giorno. Se sono presenti duplicati, join al risultato distinto impostato da giorni.

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