oracle行列转换最简单的方法
时间: 2023-09-18 17:03:49 浏览: 92
在Oracle数据库中,行列转换是指将行数据转换为列数据或将列数据转换为行数据的操作。实现行列转换的最简单方法是使用Oracle的PIVOT和UNPIVOT关键字。
1. 行转列(PIVOT):
使用PIVOT关键字可以将行数据转换为列数据。
例如,有如下的表格:Student
| ID | Name | Subject | Score |
|----|--------|----------|-------|
| 1 | John | English | 80 |
| 1 | John | Math | 90 |
| 2 | Maggie | English | 85 |
| 2 | Maggie | Math | 95 |
我们想要将Subject列转换为列标题,即将"English"和"Math"作为列名。可以使用以下SQL语句进行转换:
```
SELECT *
FROM (
SELECT ID, Name, Subject, Score
FROM Student
)
PIVOT (
MAX(Score)
FOR Subject IN ('English', 'Math')
)
```
运行上述SQL语句后,将会得到以下结果:
| ID | Name | English | Math |
|----|--------|---------|------|
| 1 | John | 80 | 90 |
| 2 | Maggie | 85 | 95 |
2. 列转行(UNPIVOT):
使用UNPIVOT关键字可以将列数据转换为行数据。
例如,有如下的表格:Subject
| ID | English | Math |
|----|---------|------|
| 1 | 80 | 90 |
| 2 | 85 | 95 |
我们想要将英语分数(English)和数学分数(Math)转换为行数据。可以使用以下SQL语句进行转换:
```
SELECT *
FROM (
SELECT ID, English, Math
FROM Subject
)
UNPIVOT (
Score
FOR Subject IN (English, Math)
)
```
运行上述SQL语句后,将会得到以下结果:
| ID | Subject | Score |
|----|---------|-------|
| 1 | English | 80 |
| 1 | Math | 90 |
| 2 | English | 85 |
| 2 | Math | 95 |
通过使用PIVOT和UNPIVOT关键字,我们可以轻松地实现Oracle数据库中行列转换的操作。
阅读全文