首页 > 数据库 > Oracle > 正文

oracle 行怎么转列

PHPz
发布: 2023-04-18 09:44:26
原创
22217 人浏览过

在Oracle数据库中,行转列是一个常见的数据处理需求。它将行中的多个值转换为一列中的多个值,从而更好地展示和分析数据。

例如,假设我们有以下表格:

ID Name Score1 Score2 Score3
1 John 80 70 90
2 Lily 90 85 95
3 Tom 60 75 80

如果我们想要将每个学生的成绩转换为单独的行,我们可以使用行转列来实现以下结果:

ID Name Subject Score
1 John Score1 80
1 John Score2 70
1 John Score3 90
2 Lily Score1 90
2 Lily Score2 85
2 Lily Score3 95
3 Tom Score1 60
3 Tom Score2 75
3 Tom Score3 80

在Oracle中,有几种方法可以实现行转列,包括使用UNPIVOT和UNION ALL。接下来,我们将详细介绍每种方法的步骤和语法。

使用UNPIVOT实现行转列

UNPIVOT是Oracle SQL中的一个关键字,可以将列移到行中。使用UNPIVOT查询可以将多列转换为多行。使用UNPIVOT首先需要确保表中的每一行都有相同的列数和相同的数据类型。

以下是使用UNPIVOT实现行转列的步骤:

步骤1:创建示例表格

首先,我们需要创建例表格以准备好数据。

CREATE TABLE score (
   ID INT,
   Name VARCHAR2(20),
   Score1 INT,
   Score2 INT,
   Score3 INT
);

INSERT INTO score VALUES (1, 'John', 80, 70, 90);
INSERT INTO score VALUES (2, 'Lily', 90, 85, 95);
INSERT INTO score VALUES (3, 'Tom', 60, 75, 80);
COMMIT;
登录后复制
登录后复制

步骤2:运行UNPIVOT查询

然后,我们可以使用以下UNPIVOT查询转换数据:

SELECT ID, Name, Subject, Score
FROM score
UNPIVOT (
   Score FOR Subject IN (Score1, Score2, Score3)
);
登录后复制

运行结果如下:

ID Name Subject Score
1 John Score1 80
1 John Score2 70
1 John Score3 90
2 Lily Score1 90
2 Lily Score2 85
2 Lily Score3 95
3 Tom Score1 60
3 Tom Score2 75
3 Tom Score3 80

步骤3:清除表格

最后,我们可以通过删除表格来清除数据:

DROP TABLE score;
登录后复制
登录后复制

使用UNION ALL实现行转列

UNION ALL也是Oracle SQL中用于行转列的一种方法。使用UNION ALL查询可以将列转换为行。以下是使用UNION ALL实现行转列的步骤:

步骤1:创建示例表格

首先,我们需要创建一个例表格来准备好数据。

CREATE TABLE score (
   ID INT,
   Name VARCHAR2(20),
   Score1 INT,
   Score2 INT,
   Score3 INT
);

INSERT INTO score VALUES (1, 'John', 80, 70, 90);
INSERT INTO score VALUES (2, 'Lily', 90, 85, 95);
INSERT INTO score VALUES (3, 'Tom', 60, 75, 80);
COMMIT;
登录后复制
登录后复制

步骤2:运行UNION ALL查询

然后,我们可以使用以下UNION ALL查询转换数据:

SELECT ID, Name, 'Score1' Subject, Score1 Score FROM score
UNION ALL
SELECT ID, Name, 'Score2' Subject, Score2 Score FROM score
UNION ALL
SELECT ID, Name, 'Score3' Subject, Score3 Score FROM score
ORDER BY ID, Subject;
登录后复制

运行结果如下:

ID Name Subject Score
1 John Score1 80
1 John Score2 70
1 John Score3 90
2 Lily Score1 90
2 Lily Score2 85
2 Lily Score3 95
3 Tom Score1 60
3 Tom Score2 75
3 Tom Score3 80

步骤3:清除表格

最后,我们可以通过删除表格来清除数据:

DROP TABLE score;
登录后复制
登录后复制

总结

行转列是一个常见的数据处理技术,可以让我们更好地展示和分析数据。在Oracle SQL中,我们可以使用UNPIVOT和UNION ALL来实现行转列。通过掌握这些概念和相关语法,我们可以轻松地处理和分析数据库中的数据。

以上是oracle 行怎么转列的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板