Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Exibindo valores LISTAGG em uma célula com base no valor de outra coluna


Sua atualização é equivalente a isso.
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 ) ;

Mas eu não recomendo isto. Armazenar os registros como valores separados por vírgulas certamente causará problemas para você no futuro. Use-o apenas para exibir os resultados usando uma consulta como abaixo. Isso pressupõe que em sua tabela de dias haja linhas exclusivas para cada dia. Se houver duplicatas, join para o conjunto de resultados distinto de dias.
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