SQL 如何将表中行列互换

暗香疏影 创作者

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

SQL 列换成行

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

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 如何将表中行列互换
  • 作者: 暗香疏影
  • 创建于 : 2020-09-23 00:00:00
  • 更新于 : 2020-09-23 00:00:00
  • 链接: https://blog.23ikr.com/2020/09/23/2020-09-23-SQL-Transpose-Table/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
SQL 如何将表中行列互换