unpivot sql server中用于快速实现列转行的函数
快速实现列转行的函数。
unpivot 是sql server中用于快速实现列转行的函数。相比于直接通过union来实现列转行,使用unpivot可以让sql语句变得更加简洁。相对而言,理解难度会上升,可读性下降。
使用场景:
有这样一个表StudentScore
姓名
|
语文
|
数学
|
物理
|
化学
|
历史
|
张三
|
71
|
72
|
73
|
74
|
75
|
李四
|
81
|
82
|
83
|
84
|
85
|
王五
|
91
|
92
|
93
|
94
|
95
|
需要将之转换成这种形式(一般是反过来。此时参见pivot)
姓名
|
科目
|
分数
|
张三
|
语文
|
71
|
张三
|
数学
|
72
|
张三
|
物理
|
73
|
张三
|
化学
|
74
|
张三
|
历史
|
75
|
李四
|
语文
|
81
|
李四
|
数学
|
82
|
李四
|
物理
|
83
|
...
|
....
|
...
|
直接使用select..union的话sql语句类似下面这样:
1
2
3
4
5
6
7
8
9
|
SELECT 姓名, 课程 = '语文' , 分数 = 语文 FROM StudentScore UNION SELECT 姓名, 课程 = '数学' , 分数 = 数学 FROM StudentScore UNION SELECT 姓名, 课程 = '物理' , 分数 = 物理 FROM StudentScore UNION SELECT 姓名, 课程 = '化学' , 分数 = 化学 FROM StudentScore UNION SELECT 姓名, 课程 = '历史' , 分数 = 历史 FROM StudentScore |
长度和列数线性相关。
此时可以通过使用unpivot来大大缩短长度。
格式
SELECT
简称.元列名1
简称.新列名2,
简称.新列名3
FROM
数据源 AS 简称1
UNPIVOT
(新列名3 FOR 新列名2 IN (元列名2,元列名3,元列名3,元列名4,元列名5)) AS 简称
1 2 3 4 5 6 7 8 | SELECT 简称2.姓名, 简称2.课程, 简称2.分数 FROM StudentScore UNPIVOT (分数 FOR 课程 IN (语文,数学,物理,化学,历史)) AS 简称2 |
执行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-06-15 vue-devtools 下载配置以及具体使用