Успях да разреша това чрез решение, предоставено от SQL експерт Крис Саксън
използвайки с 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