pivot和unpivot
1、pivot使用
pivot可以实现将行转列
select sname,苹果,香蕉,西瓜,李子,梨 from (select sname,fruit,fnum from stest) pivot (sum(fnum) for fruit in('苹果' as 苹果,'香蕉' as 香蕉,'西瓜' as 西瓜,'李子' as 李子,'梨' as 梨)) (将fruit字段的值换成各个字段名,select sname,fruit,fnum from stest里面必不可少fruit、fnum,因为pivot后面的语句会使用)
语法:select <非透视的列>,[第一个透视的列],...[最后一个透视的列] from
(<生成数据的SELECT查询>)
pivot
(<聚合函数> (<要聚合的列>) for <值要成为字段的列> in ([第一个透视的列],... [最后一个透视的列]))
注释:<非透视的列>=sname
[第一个透视的列],...[最后一个透视的列]=苹果,...梨
<生成数据的SELECT查询>=select sname,fruit,fnum from stest
<聚合函数> (<要聚合的列>)=sum(fnum)
<值要成为字段的列>=fruit
注:在oracle使用 [苹果] 这种表达式会出错,所以需要使用 '苹果 ' as 苹果 这种表达式
2、unpivot使用
unpivot可以实现列转行
通过 create table 表名新 as select * from 表名旧 得到一个复制的表
select sname,fruit,fnum from atest unpivot (fnum for fruit in(苹果,香蕉,西瓜,李子,梨))
语法:select <未逆透视的列>, <合并后的列名>,<行值的列名> from <源表>
unpivot
(<行值的列名> for <合并后的列名> in ([第一个合并列],...[最后一个合并列])
注释:<未逆透视的列>=sname
<合并后的列名>=fruit
<行值的列名>=fnum
[第一个合并列],...[最后一个合并列]=苹果,...梨
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下