我有一张如下所示的表格
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),可能有多个协议条款(最多三个 - 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,所以我不能使用 pivot。我不想在选择中使用标量子查询,因为使用这种方法性能会降低数倍。我尝试使用以下查询首先连接所有字段,然后使用外部查询将它们拆分,但还不能这样做。
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