我想编写一个 Oracle 查询来转换下表
Attribute Value
product_id P1
product_name AAA
product_id P2
product_name BBB
product_id P3
product_name CCC
进入以下输出:
product_id product_name
P1 AAA
P2 BBB
P3 CCC
每个产品的属性始终处于正确的顺序,因为我将它们从基于结构属性的 XML 数据转换而来。例如:
感谢您的帮助。
我尝试使用
PIVOT
,但它需要在枢轴操作中使用聚合函数,在我的例子中,我没有任何列来应用聚合函数。
您可以使用 ROW_NUMBER() 为每行生成递增序列(根据您在暂存区中所述的假设,行将按顺序排列)。将生成的行号除以2(先偏移1)生成
grouping
。使用 grouping
生成所需结果的数据透视表。
WITH CTE(Attribute, Value, grouping) AS (
SELECT p.*, TRUNC((ROW_NUMBER() OVER(ORDER BY null)-1)/2) grouping FROM Product p
), PIVOT_TABLE(grouping, product_id, product_name) AS (
SELECT * FROM CTE
PIVOT
(
MAX(Value)
FOR Attribute IN ('product_id', 'product_name')
)
ORDER BY grouping
)
SELECT product_id, product_name FROM PIVOT_TABLE