SQL 如何将表中行列互换

简介: 本文介绍了在 SQL 中使用 PIVOT 和 UNPIVOT 实现行列互换的方法。通过实例展示了如何将学生各科成绩由行转为列,并强调使用 PIVOT 时需隐藏无关列以避免重复行。同时说明了数据类型转换及非数字数据的处理方式。

在工作中,我们发现有时候需要将表中的行列进行互换。

SQL 列换成行

SQL 中可以使用PIVOT这个命令,同理,行换成列使用UNPIVOT。


SELECT * FROM 
(SELECT [StudentID]
      ,[Surname]
      ,[ForeName],[YearGroup]
      ,[Class]
      ,[SubjectName]
      --,[SubjectChineseName]
      ,CAST([StudentMarkData] AS float) AS Mark2
  FROM [newDB].[dbo].[ClassMarksheet]
  ) AS BaseTable
  PIVOT( 
    AVG(Mark2)
    FOR [SubjectName] in ([Mathematics],[Chinese],[English],[Science])
) AS StudentMarksMerge

使用PIVOT需要注意的是,必须把其他列中同一学生不同信息列隐藏才可以。
例如:我们把一行一行列出的科目变成一列一列,我们的SubjectChineseName就要隐藏掉,否则Pivot出来的结果是同一个学生一样有四行。
只不过右边多出了四列科目而已。
我这里先CAST是因为需要转换格式,从NVARCHAR转为FLOAT。
如果我想要转换的行列数据不是数字的话,应该用什么?
我们可以通过COUNT得到出现的次数,也可以通过MIN()或者MAX()直接显示内容。

相关文章
|
SQL HIVE 索引
【Hive SQL 每日一题】行列转换
该文介绍了如何使用SQL进行数据的行列转换。首先展示了行转列的例子,通过创建一个学生成绩表,利用`IF`和`SUM`函数按学生ID分组,将每个学生的各科成绩转换为独立列。然后,文章讲述了列转行的需求,利用`LATERAL VIEW`和`POSEXPLODE`将已转换的表格恢复为原始行格式,通过索引匹配过滤笛卡尔积避免错误结果。此外,还提到了使用`UNION ALL`的另一种列转行方法。
519 1
|
SQL Oracle 关系型数据库
【SQL应知应会】行列转换(三)• Oracle版
【SQL应知应会】行列转换(三)• Oracle版
245 0
|
存储 SQL Oracle
【SQL应知应会】行列转换(二)• MySQL版
【SQL应知应会】行列转换(二)• MySQL版
405 0
|
SQL 存储 Oracle
通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)
在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能 一、MSsqlserver中我们通常的用法
513 0
|
存储 SQL 分布式计算
MaxCompute SQL使用小技巧之行列转换
行列转换在业务需求分析经常使用,方法很多,这里介绍下使用Maxcomputer内置函数进行转换
1659 0
|
SQL HIVE
SQL之行列转换
Hive 查询语句之行列转换
246 0
|
SQL 索引 存储
SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句
原文:SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句 原文出处:http://www.cnblogs.com/wy123/p/5933734.html     先看常用的一种表结构设计方式:   那么可能会遇到一种典型的查询方式,主子表关联,查询子表中的某些(或者全部)Key点对应的Value,横向显示(也即以行的方式显示)   这种查询方式很明显的一个却显示多次对字表查询(暂时抛开索引)   相比这种查询方式很多人都遇到过,如果子表是配置信息之类的小表的话,问题不大,如果字表数据量较大,可能就会有影响了。
1393 0
|
SQL 数据安全/隐私保护
|
SQL 数据安全/隐私保护

热门文章

最新文章