oracle数据库中,有表第一列学生id,第二列科目名称,第三列成绩,现在转换成第一列科目名称,第二列学生id,第三列成绩如何实现
时间: 2024-01-03 21:05:37 浏览: 51
可以使用 Oracle 中的 `pivot` 和 `unpivot` 函数来实现这个转换。
首先,可以使用 `pivot` 函数将原表按照科目名称进行透视,生成新表:
```sql
SELECT *
FROM (
SELECT *
FROM 原表名称
)
PIVOT (
MAX(成绩)
FOR 科目名称 IN (科目1, 科目2, ... , 科目n)
);
```
其中,`MAX(成绩)` 表示按照科目名称进行透视后,对成绩进行聚合操作,这里使用 `MAX` 函数,也可以使用其他聚合函数;`科目1, 科目2, ... , 科目n` 表示所有的科目名称,需要根据实际情况进行替换。
上述查询语句会生成一个新表,其中第一列是学生 id,后面是各个科目的成绩。
接下来,可以使用 `unpivot` 函数将新表按照学生 id 进行逆透视,生成最终的结果:
```sql
SELECT *
FROM (
SELECT *
FROM (
SELECT *
FROM 原表名称
)
PIVOT (
MAX(成绩)
FOR 科目名称 IN (科目1, 科目2, ... , 科目n)
)
)
UNPIVOT (
成绩
FOR 科目名称 IN (科目1, 科目2, ... , 科目n)
);
```
上述查询语句会生成最终的结果表,其中第一列是科目名称,后面是学生 id 和成绩。
阅读全文