sql >> Databáze >  >> RDS >> Oracle

Převést WM_CONCAT na Listagg

Základní syntaxe LISTAGG je:

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

Ve vašem případě, protože máte jako výsledek dílčí dotaz nastaven na WM_CONCAT , můžete umístit stejný poddotaz místo col_name_to_be_aggregated v LISTAGG .

Myslím, že se také můžete zbavit všech NAHRADIT funkce, protože LISTAGG může přijmout oddělovač tvé volby.

Zkuste,

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)

Také bych rád vysvětlil, proč musíte přejít na LISTAGG v 12c. Protože t bylo odstraněno z nejnovější verze 12c. Proto žádná aplikace, která se spoléhala na funkci WM_CONCAT, nebude po upgradu na 12c fungovat. Přečtěte si Proč nepoužít WM_CONCAT funkce v Oracle?

U verze před 11g verze 2 nelze použít LISTAGG. Existuje mnoho technik agregace řetězců, podívejte se na mou odpověď zde .

Další podrobnosti o technikách agregace řetězců Oracle



  1. Zobrazení průběhu při doInbackground

  2. Vygenerujte tabulku MySQl skriptu aktualizace

  3. Zapište Pandas DataFrame do databáze MySQL

  4. Vytvořte datum z roku, měsíce a dne