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

サブクエリエラーとxmllaggを使用した値が多すぎます

    xmlaggとxQueryの組み合わせ、それは単純ではありません。

    select xmlquery('distinct-values(//text())' passing x returning content).getclobVal(),data_type from (
        select   xmlelement(root, xmlagg(XMLELEMENT(e,table_name,','))) x ,data_type
         from user_tab_cols where data_type in ('VARCHAR2','NUMBER')     
         group by data_type
         )
    

    そして、あなたの目的のために、それはこのように見えるはずです

    select 
        app, key_event,  
        xmlquery('distinct-values(//text())' passing xmldoc returning content).getclobVal()
    from 
        (select  
             t2.app,  
             coalesce(max(case when language =  2 then description end), 
                      max(case when language = 12 then description end), 
                      max(case when language = 27 then description end), 
                      'NULL') key_event,
             XMLELEMENT(root, xmlagg(XMLELEMENT(e, description, ','))
        ) xmldoc
    from 
        table2 t2 
    left join 
        table1 t1 on t1.app = t2.app 
    group by 
        trans, t2.app
    order by trans);
    

    このクエリを分解すると、その動作がわかります。

    xqueryの異なる値の構文

    xmlquery構文



    1. 多対多の関連付けを持つ複数の条件を持つデータを検索するためのSQL/Doctrineクエリ

    2. 複数のテーブルからのデータの参照

    3. SQLで勾配を計算する方法

    4. 列のすべての値をチェックするSQL