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

    ただし、お勧めしません これ。レコードをカンマ区切りの値として保存すると、将来的に問題が発生する可能性があります。以下のようなクエリを使用して結果を表示するためにのみ使用してください。これは、days テーブルに各日ごとに一意の行があることを前提としています。重複がある場合は、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. PHPMySQLimulti_queryプリペアドステートメント

    2. Oracleでこの動的更新を行うにはどうすればよいですか?

    3. MySQLのTOPに代わるものはありますか?

    4. データベースのベンチマーク101-パート1