SQL语句 列转行

如题所述

在SQL中,行列转换是非常实用的功能,有助于数据展示的灵活性。我们有两个主要的方法:PIVOT和UNPIVOT。PIVOT用于将列数据转化为行,而UNPIVOT则相反,将行数据转化为列。

首先,PIVOT操作的示例:

sql
DECLARE @Score TABLE (StuNo varchar(10), StuName varchar(50), CourseName varchar(50), Score int)
INSERT INTO @Score
VALUES ('1', 'Tom', 'Math', 80),
('1', 'Tom', 'English', 82),
('1', 'Tom', 'Geography', 84),
('2', 'Jone', 'Math', 79),
('2', 'Jone', 'English', 88),
('2', 'Jone', 'Geography', 86)

SELECT StuNo, StuName,
MAX(CASE CourseName WHEN 'Math' THEN Score END) AS Math,
MAX(CASE CourseName WHEN 'English' THEN Score END) AS English,
MAX(CASE CourseName WHEN 'Geography' THEN Score END) AS Geography
FROM @Score
PIVOT (MAX(Score) FOR CourseName IN ('Math', 'English', 'Geography')) AS ScoreList
ORDER BY StuNo

这段代码将成绩表中的课程分数按照学生和课程名称进行行列转换,每行只保留一个学生的成绩数据。

而UNPIVOT操作则如是:

sql
DECLARE @ScoreList TABLE (StuNo varchar(10), StuName varchar(50), Math int, English int, Geography int)
INSERT INTO @ScoreList
VALUES ('1', 'Tom', 80, 82, 84),
('2', 'Jone', 79, 88, 86)

SELECT StuNo, StuName, CourseName, Score
FROM @ScoreList
UNPIVOT (Score FOR CourseName IN (Math, English, Geography)) AS PvtTable
ORDER BY StuNo

这段代码将成绩表中的每个学生课程的分数拆分为单独的列,便于查看每个学生在不同课程的表现。

总的来说,PIVOT用于将列数据转化为行,方便汇总和展示,UNPIVOT则用于将行数据拆分,展示每个单元格的详细信息。根据实际需求,选择合适的方法进行数据转换。
温馨提示:内容为网友见解,仅供参考
无其他回答

SQL中的行转列和列转行
行转列和列转行是SQL中常见的数据转换需求,通过条件聚合(sum+if)和并集(union)操作,可以实现数据表形态的灵活转换。这些技能在数据分析、报表生成等场景中应用广泛,掌握它们对于提升数据处理效率至关重要。

sql语句列转行
可以通过SQL中的`UNION`或`UNION ALL`操作将列转换为行。在SQL中,有时需要将多列数据转换为多行数据,即所谓的列转行操作。这种情况下,可以使用`UNION`或`UNION ALL`操作符来实现。这两个操作符用于合并两个或多个SELECT语句的结果集,并自动去重或包含重复行。区别在于,`UNION`会自动去除重复行...

sql-行列转换
一、列转行 在一行数据中,如果某个字段包含了多个数据项,而我们需要对每个数据项进行详细的分析,这时候就需要进行行列的转换。这种转换可以通过使用lateral view explode()函数[2]来实现。二、行转列 行转列的转换方向如下:

Oracle列转行函数vm_concat在19C版本不兼容解决方案
        通过自定义函数解决也是可以的,不过我并不是这样做的。 下面介绍一下我的解决方法。首先分析一下,Oracle19C不兼容vm_concat列转行函数,并不代表其它函数不兼容,或许可以找到其它代替的,通过找资料,发现了Oracle11提供的另外一个函数:listagg()函数 语法:lista...

SQL 行转列
行转列,顾名思义,是将原有的行数据按照某个字段拆分为多列。例如,如果在`temp1`表中,我们有一个字段`zj`,原始数据如zjname列,通过以下SQL语句可以实现列转行:SELECT a, zjname AS f FROM temp1 UNPIVOT (zjname FOR zj IN (b, c, d, e, f, g, h, i, j));这将按照`zj`...

sql面试:sql中的行转列和列转行
在SQL面试中,行转列与列转行是常考题目,本文解析这两种转换方法。假设给定的模拟数据集为学生成绩表,分为长表与宽表两种形态。对于行转列,利用sum+if组合实现,通过条件聚合筛选出特定课程的成绩,使用if语句构建新列,仅当课程为语文时取值为成绩,否则为NULL。聚合函数如sum、min、max均能有效获取...

SQL语句 列转行
在SQL中,行列转换是非常实用的功能,有助于数据展示的灵活性。我们有两个主要的方法:PIVOT和UNPIVOT。PIVOT用于将列数据转化为行,而UNPIVOT则相反,将行数据转化为列。首先,PIVOT操作的示例:sql DECLARE @Score TABLE (StuNo varchar(10), StuName varchar(50), CourseName varchar(50), Score ...

Sql怎么进行列转行?行转列?
对于Oracle10G及之前的版本,尽管没有内置的Pivot和Unpivot函数,但也有多种方法可以实现行列转换。列转行,即把数据从列格式转换为行格式,可以通过以下几种方式实现:Lead方式:通过使用LEAD()函数,可以在指定位置插入一行,将列数据分散到新行中。Decode方式:根据特定条件,使用DECODE函数将数据拆分到不...

SQL 之列转行Unpivot函数
现在,让我们通过Unpivot函数操作实现列转行。执行Unpivot函数后,我们能够获得如下结果,将原始数据中的列转换为行,使得每一行对应一个手机号码及其对应的电话拨打次数。为确保理解Unpivot函数的用法,以下是相关参考资料:1. 使用SQL Server的UNPIVOT运算符帮助规范化输出 2. SQL之行转列Pivot用法 通过本文...

SQL实用技巧-行列转换
在MySQL、Hive和Spark SQL中,UNION ALL可以用于列转行,通过合并每个列的值。虽然它灵活,但处理大量列时可能会变得繁琐,需要多次重复操作。Spark SQL提供了explode函数,可以将数组或map拆分为多行,这对于列转行很有帮助。在Hive中,可能需要借助LATERAL VIEW功能来处理UDTF(用户定义的表生成器)生成的...

相似回答
大家正在搜