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

Oracle12cと11gでは動作が異なる相関サブクエリ

    これは、SQLエキスパート ChrisSaxon が提供するソリューションによって解決できました。 WITHで使用する CTE。以前はメインの駆動テーブルとして使用していましたが、次のような相関クエリにあるはずです。

    with ar_kbox_details as (
      select ab_info_n3  trx_id,
             ab_info_v5  box,
             ab_info_n1  amount
      from xxab_zz_vat_trx_gt
      where ab_info_v1 = 'AR'
      and ab_info_v5 <> 'tns:'
      union all
      select ab_info_n3  trx_id,
             ab_info_v6  box,
             ab_info_n2  amount
      from xxab_zz_vat_trx_gt
      where ab_info_v1 = 'AR'
      and ab_info_v6 <> 'tns:'
    )
    SELECT XMLAGG(XMLCONCAT(XMLElement
    ("tns:SprzedazWiersz",
        xmlelement("tns:LpSprzedazy"      ,   rownum),
        xmlelement("tns:KodKrajuNadaniaTIN",  substr(ar_trx.tax_reg_num, 0, 2)),
        xmlelement("tns:NrKontrahenta"    ,   substr(ar_trx.tax_reg_num, 2)),
        xmlelement("tns:NazwaKontrahenta" ,   ar_trx.cust_name),
        xmlelement("tns:DowodSprzedazy"   ,   ar_trx.trx_number),
        xmlelement("tns:DataWystawienia"  ,   TO_CHAR(ar_trx.invoice_date,'RRRR-MM-DD')),
        Case When ar_trx.sales_date is not null Then xmlelement("tns:DataSprzedazy"    ,   TO_CHAR(ar_trx.sales_date,'RRRR-MM-DD')) END
        -- Document Type
        ,(select distinct xmlagg(xmlconcat(xmlelement("tns:TypDokumentu", ab_info_v15)))
        From   xxab_zz_vat_trx_gt
        Where  ab_info_v1 = 'AR'
        and ab_info_n3 = ar_trx.trx_id
        and ab_info_v16 = 'ORA_JEPL_DOCUMENT_TYPE')
        -- product category code
        ,(select distinct xmlagg(xmlconcat(xmlelement(evalname(ab_info_v13), 1)))
        from    xxab_zz_vat_trx_gt
        Where ab_info_V1 = 'AR'
        and ab_info_v13 <> 'tns:'
        and ab_info_n3  = ar_trx.trx_id)
        -- Trade Attributes
        ,(select distinct xmlagg(xmlconcat(xmlelement(evalname(DECODE(TRADE_ATTRIBUTE_VALUES, '1', 'tns:MPP', TRADE_ATTRIBUTE_VALUES)), 1))
        order by 
        case TRADE_ATTRIBUTE_VALUES
        when 'tns:SW'           THEN 1
        when 'tns:EE'           THEN 2
        when 'tns:TP'           THEN 3
        when 'tns:TT_WNT'           then 4
        when 'tns:TT_D'         THEN 5
        when 'tns:MR_T'         THEN 6
        when 'tns:MR_UZ'            THEN 7
        when 'tns:I_42'             THEN 8
        when 'tns:I_63'             THEN 9
        when 'tns:B_SPV'            THEN 10
        when 'tns:B_SPV_DOSTAWA'  THEN 11
        when 'tns:B_MPV_PROWIZJA' THEN 12
        when 'tns:MPP'          THEN 13
        ELSE 14 END)
        from     xxab_zz_vat_trx_gt unpivot (TRADE_ATTRIBUTE_VALUES for TRADE_ATTRIBUTES in (ab_info_v12, ab_info_v20))
        Where  ab_info_V1 = 'AR'
        and  TRADE_ATTRIBUTE_VALUES not in ('tns:', 'tns:IMP', '0')
        and  ab_info_n3 = ar_trx.trx_id
        )
        --KBoxes
        ,(select xmlagg(xmlconcat(xmlelement(evalname(fnd_box.box),ROUND(sum(nvl(akd.amount, 0)),2))))
        from    ar_kbox_details akd
            ,   (SELECT 'tns:K_'||(LEVEL + 9) box
                FROM dual
                CONNECT BY LEVEL <= 27) fnd_box     
        where fnd_box.box = akd.box (+)
        and   ar_trx.trx_id = akd.trx_id (+)
        group by fnd_box.box)
        )))
    From ( Select distinct 
            ab_info_n3  trx_id
        ,   ab_info_v2  trx_number
        ,   ab_info_d1  sales_date
        ,   ab_info_d3  invoice_date
        ,   ab_info_v3  cust_name
        ,   ab_info_v17 cust_addr
        ,   ab_info_v7  tax_reg_num
    From xxab_zz_vat_trx_gt
    Where ab_info_v1 = 'AR'
    Order by 3,4) ar_trx                                                
    



    1. データベースサーバーに接続できません(mysqlワークベンチ)

    2. SQLServerクラスターをセットアップするための9つのヒント

    3. mysqlの結合を使用してパフォーマンスによって順序を改善する方法

    4. mysqlの結果セットは常にnullです