Oracle
 sql >> база данни >  >> RDS >> Oracle

Показване на LISTAGG стойности в клетка въз основа на стойността на друга колона

Вашата актуализация е еквивалентна на тази.

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

Но аз не бих препоръчал това. Съхраняването на записите като стойности, разделени със запетая, непременно ще ви създаде проблеми в бъдеще. Използвайте го само за показване на резултатите чрез заявка като по-долу. Това предполага, че във вашата таблица с дни има уникални редове за всеки ден. Ако има дубликати, join го към отделния набор от резултати от дни.

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 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция TO_DSINTERVAL() в Oracle

  2. Грешки при задействане ORA-04092 ORA-04088

  3. SQL Server е паралелен на Oracle DBMS_METADATA.GET_DDL?

  4. hibernate oracle последователността произвежда голяма празнина

  5. dbms_lob.getlength() срещу length() за намиране на размера на петна в oracle