sql >> データベース >  >> RDS >> Oracle

WM_CONCATをListaggに変換します

    LISTAGGの基本構文 は:

    LISTAGG(col_name_to_be_aggregated, ',') WITHIN GROUP (ORDER BY col)
    

    あなたの場合、結果としてサブクエリがWM_CONCATに設定されているため 、col_name_to_be_aggregatedの代わりに同じサブクエリを配置できます LISTAGGで 。

    すべての交換を取り除くこともできると思います 関数は、LISTAGGが区切り文字を受け入れることができるためです。 お好みの。

    試してみてください

    LISTAGG
    (
      CASE
      WHEN ROW_NUMBER() OVER (PARTITION BY product_id,
                                           product_detail_set_id,
                                           registration_id,
                                           product_family_id,
                                           application_id,
                                           package_Set_id, 
                                           legal_status 
                                           order by packset_country)=1 THEN
        legal_status
      ELSE
        NULL
      END), ',') WITHIN GROUP (ORDER BY required_col)
    

    また、12cでLISTAGGに移行する必要がある理由を説明したいと思います。 tが最新の12cバージョンから削除されたため。したがって、WM_CONCAT関数に依存していたアプリケーションは、12cにアップグレードすると機能しなくなります。 WM_CONCATを使用しない理由を読むOracleで機能しますか?

    11gより前のリリース2では、LISTAGGを使用できません。文字列の集計手法はたくさんあります。私の答えをご覧くださいこちら

    Oracle文字列集約手法の詳細



    1. PHPでデータベースの自動再接続を有効にする方法は?

    2. MYSQLは、各カテゴリから2つのランダムな行を選択します

    3. MySQLピボットテーブルヘッドスクラッチャー

    4. rails-postgresエラー:理由:互換性のないライブラリバージョン:libpq.5.dylibにはバージョン1.0.0以降が必要です。