本文共 1415 字,大约阅读时间需要 4 分钟。
在日常的工作中,尤其是涉及数据处理和分析的场景,我们常常需要将多行数据转化为单行数据。以下是一个关于SQL Server中列转行操作的示例,展示了如何将不同课程的成绩从表中转换为行数据。
首先,我们创建一个名为stu_Score的表,包含学生姓名和三门课程的成绩。以下是具体操作:
if objectid('stu_Score') is nullbegin create table stu_Score ( name varchar(10), java int, C# int, python int )endinsert into stu_Score values ('Dina', 82, 93, 90)insert into stu_Score values ('Joyce', 87, 80, 95)insert into stu_Score values ('Mandy', 93, 86, 90) 执行以下查询可以查看表中当前数据:
select * from stu_Score
此时,表中数据如下:
| name | java | C# | python |
|---|---|---|---|
| Dina | 82 | 93 | 90 |
| Joyce | 87 | 80 | 95 |
| Mandy | 93 | 86 | 90 |
为了实现列转行,我们可以使用两种方法:
UNION ALL操作select name, course = 'java', score = javafrom stu_Scoreunion allselect name, course = 'C#', score = C#from stu_Scoreunion allselect name, course = 'python', score = pythonfrom stu_Score
此时,查询结果如下:
| name | course | score |
|---|---|---|
| Dina | java | 82 |
| Joyce | java | 87 |
| Mandy | java | 93 |
| Dina | C# | 93 |
| Joyce | C# | 80 |
| Mandy | C# | 86 |
| Dina | python | 90 |
| Joyce | python | 95 |
| Mandy | python | 90 |
UNPIVOT操作select name, course, scorefrom stu_Scoreunpivot (score for course in ([java], [C#], [python]))
此时,查询结果如下:
| name | course | score |
|---|---|---|
| Dina | java | 82 |
| Dina | C# | 93 |
| Dina | python | 90 |
| Joyce | java | 87 |
| Joyce | C# | 80 |
| Joyce | python | 95 |
| Mandy | java | 93 |
| Mandy | C# | 86 |
| Mandy | python | 90 |
两种方法的查询结果一致,均将原始表中的多列数据转换为行数据,便于后续的数据分析和呈现。
通过上述两种方法,我们成功实现了将stu_Score表中的多列数据转换为行数据的操作。这两种方法各有特点,选择取决于具体的业务需求和数据结构。
转载地址:http://iwpl.baihongyu.com/