PL/SQL 实现行列转换
这篇博文写的是简单的行列转换的,以一个具体的例子来给出。
以前在论坛上有人问过相关的问题,上面的回答五光十色,有很多是可行的,当然更多的是自以为很高端,实际却不着边际的回答。下面进入正题。
part1:列转行。需求:
示例给出这么一张表:
表定义如下:
create table TEST_TB_GRADE ( ID NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), COURSE VARCHAR2(20 CHAR), SCORE FLOAT )
要求转换成为:
下面给出一个可行的PL/SQL语句:
select t.user_name as 姓名, sum(decode(t.course, '语文', score,null)) as 语文, sum(decode(t.course, '数学', score,null)) as 数学, sum(decode(t.course, '英语', score,null)) as 英语 from test_tb_grade t group by t.user_name order by t.user_name
实现效果如下图需求所示。
Part2:行转列。需求:
示例给出这样一张表
表结构如下:
create table TEST_TB_GRADE2 ( ID NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), CN_SCORE FLOAT, MATH_SCORE FLOAT, EN_SCORE FLOAT )
需要转换成如下形式:
下面给出一个可执行的PL/SQL语句:
select user_name, '语文' as COURSE , CN_SCORE as SCORE from test_tb_grade2 union all select user_name, '数学' as COURSE, MATH_SCORE as SCORE from test_tb_grade2 union all select user_name, '英语' as COURSE, EN_SCORE as SCORE from test_tb_grade2 order by user_name,COURSE
实现效果如下图需求所示。
本文旨以一个具体的例子,给出一种Oracle中行列转换的方案,没有什么可圈可点的地方,欢迎给出其他实现,也欢迎批评指正!
【请点击下面的“绿色通道”-----“关注DebugLZQ” ,共同交流进步~】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架