sql >> Databasteknik >  >> RDS >> Oracle

Visar LISTAGG-värden i en cell baserat på värdet i en annan kolumn

Din uppdatering motsvarar detta.

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

Men jag skulle inte rekommendera detta. Att lagra posterna som kommaseparerade värden kommer definitivt att orsaka problem för dig i framtiden. Använd den bara för att visa resultaten med en fråga som nedan. Detta förutsätter att det i din dagstabell finns unika rader för varje dag. Om det finns dubbletter, join det till det distinkta resultatet från dagar.

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. Lagrad procedur som automatiskt tar bort rader äldre än 7 dagar i MYSQL

  2. Hur kodar man tecken från Oracle till XML?

  3. Oracle PL/SQL:Exportera data från en tabell till CSV

  4. SQLAlchemy-frågan visar fel Kan inte sammanfoga tabellen/valbara "arbetsflöden" till sig själv