次のようなテーブルがあります
po_num | terms type | terms description
-------------------------------------------
10 | 1 | Desc-10-1
10 | 2 | Desc-10-2
10 | 3 | Desc-10-3
20 | 1 | Desc-20-1
20 | 3 | Desc-20-3
30 | |
したがって、各発注書 (PO_NUM) には、複数の契約条件 (最大 3 - 1、2、3) が存在する場合もあれば、契約条件がまったくない場合もあります。ここで必要なのは、行を列に転置することです。つまり、po_num ごとに、以下のような同様の出力が必要です。
po_num | terms1 | termsDesc2 | terms2 | termsDesc2 | terms3 |termsDesc3
---------------------------------------------------------------------------------------
10 | 1 | Desc-10-1 | 2 | Desc-10-2 | 3 |Desc10-3
20 | 1 | Desc-20-1 | | | 3 |Desc20-3
30 | | | | | |
Oracle 11.2 がインストールされていないため、ピボットを使用できません。そのアプローチではパフォーマンスが数回低下するため、selectでスカラーサブクエリを使用したくありません。次のクエリを使用して、最初にすべてのフィールドを連結し、それらを外側のクエリで分割しようとしましたが、まだ実行できていません。
SELECT po_num,
RTRIM (
XMLAGG (
XMLELEMENT (
po_table,
po_table.terms_id || '|' || po_table.terms_description || '|')).
EXTRACT ('//text()'),
'|')
po_concat
FROM po_table
WHERE 1 = 1
GROUP BY PO_table.po_num