使用PIVOT或UNPIVOT关键字进行行列转换,或者使用CASE语句和聚合函数实现。
Oracle行列转换的方法有以下几种:
1、使用PIVOT关键字进行行转列操作
使用CASE语句和聚合函数(如SUM、COUNT等)将行数据转换为列数据。
语法示例:
```sql
SELECT *
FROM table_name
PIVOT (aggregate_function(column_name) FOR column_to_pivot IN (value1, value2, ...))
```
2、使用UNPIVOT关键字进行列转行操作
使用CASE语句和聚合函数将列数据转换为行数据。
语法示例:
```sql
SELECT *
FROM table_name
UNPIVOT (column_name FOR column_to_unpivot IN (value1, value2, ...))
```
3、使用自连接进行行列转换
通过将原始表与自身进行连接,将行数据转换为列数据。
语法示例:
```sql
SELECT t1.*, t2.column_name AS column_to_pivot
FROM table_name t1
LEFT JOIN table_name t2 ON t1.id = t2.id AND t2.column_to_pivot IS NOT NULL
WHERE t1.column_to_pivot = 'value' OR t2.column_to_pivot IS NULL
```
4、使用窗口函数进行行列转换
使用窗口函数(如ROW_NUMBER、RANK等)对行数据进行分组和排序,实现行列转换。
语法示例:
```sql
SELECT id, column_name, row_number() OVER (PARTITION BY column_to_pivot ORDER BY column_name) AS row_num
FROM table_name
```
5、使用CASE语句和GROUP BY进行行列转换
使用CASE语句和GROUP BY子句将行数据转换为列数据。
语法示例:
```sql
SELECT id, max(CASE WHEN column_to_pivot = 'value' THEN column_name END) AS column_name, ...
FROM table_name
GROUP BY id, ...
```
还没有评论,来说两句吧...