sql >> Base de Datos >  >> RDS >> Oracle

Mostrar valores LISTAGG en una celda en función del valor de otra columna

Su actualización es equivalente a esto.

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

Pero, no recomendaría este. Almacenar los registros como valores separados por comas seguramente le causará problemas en el futuro. Úselo solo para mostrar los resultados usando una consulta como la siguiente. Esto supone que en su tabla de días hay filas únicas para cada día. Si hay duplicados, join al conjunto de resultados distinto de días.

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