sql >> Database >  >> RDS >> Oracle

LISTAGG-waarden in een cel weergeven op basis van de waarde van een andere kolom

Uw update is hiermee gelijk.

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

Maar ik zou niet aanbevelen deze. Het opslaan van de records als door komma's gescheiden waarden zal in de toekomst ongetwijfeld problemen voor u opleveren. Gebruik het alleen om de resultaten weer te geven met een query zoals hieronder. Dit veronderstelt dat er in uw dagentabel unieke rijen zijn voor elke dag. Als er duplicaten zijn, join het naar de verschillende resultatenset van dagen.

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. hoe twee rijen van dezelfde mysql-tabel in php te matchen

  2. Oracle-geparametriseerde query in c#

  3. kon mysql-procedure voor cursors niet compileren

  4. Hoe te zoeken naar een postgres integer-array in het voorjaar?