Oracle行列转换
时间: 2023-12-05 11:29:06 浏览: 91
Oracle数据库中行列转换可以通过使用PIVOT和UNPIVOT操作来实现。
1. 行转列(PIVOT):
PIVOT操作可以将行数据转换为列数据。它需要一个聚合函数来对转换后的列进行计算。
例如,假设有一个包含订单编号、产品类型和销售量的表OrderDetails:
```
ORDER_NUMBER PRODUCT_TYPE SALES_QUANTITY
-----------------------------------------
1 A 10
1 B 5
2 A 8
2 B 7
```
要将产品类型从行转换为列,并计算每个订单的销售总量,可以使用以下查询:
```
SELECT *
FROM OrderDetails
PIVOT (
SUM(SALES_QUANTITY)
FOR PRODUCT_TYPE IN ('A', 'B')
);
```
查询结果如下:
```
ORDER_NUMBER 'A' 'B'
---------------------
1 10 5
2 8 7
```
2. 列转行(UNPIVOT):
UNPIVOT操作是PIVOT操作的逆过程,它将列数据转换为行数据。
使用UNPIVOT操作需要一个目标表来存储转换后的行数据。
假设有一个包含订单编号、产品类型和销售量的表OrderSummary:
```
ORDER_NUMBER 'A' 'B'
---------------------
1 10 5
2 8 7
```
要将列转换为行,可以使用以下查询:
```
SELECT *
FROM OrderSummary
UNPIVOT (
SALES_QUANTITY
FOR PRODUCT_TYPE IN ('A', 'B')
);
```
查询结果如下:
```
ORDER_NUMBER PRODUCT_TYPE SALES_QUANTITY
-----------------------------------------
1 'A' 10
1 'B' 5
2 'A' 8
2 'B' 7
```
总结:Oracle中的行列转换可以使用PIVOT和UNPIVOT操作来实现,PIVOT将行转换为列,UNPIVOT将列转换为行。
阅读全文