Oracle行转列(pivot)和Oracle列转行(unpivot)

news/2024/5/16 20:25:55/文章来源:https://blog.csdn.net/qq_34958326/article/details/127674187

        行变列,列变行在生成报表的时候经常遇到,行变列叫做"Pivot”, 反之叫做"Unpivot”。 在Oracle11g之前,一般都是通过case来实现,但是Oracle11g及其以后直接支持PIVOT和UNPIVOT的操作。

pivot

        语法:

        

SELECT * FROM (元数据)
PIVOT 
(SUM(Score/*行转列后 列的值*/) FOR coursename/*需要行转列的列*/ IN (转换后列的值)
)

for 可以看成循环,for前是行转列后显示的值(这里必须使用聚合函数),for后是循环的字段(一般是有限的固定值,如字典等) in (里是对for后的循环字段处理,比如起别名,做运算等)

         之前写sql的处理方式,遇到放在一起显示成一行的数据时,都是使用left join...连接成一条记录显示,这样效率不仅低而且sql看起来还很乱,如下所示:想将数据表按照数据来源统计求和

SELECTto_char(to_date(t1.tjrq,'yyyymmdd'),'yyyy"年"mm"月"dd"日"') tjrq,nvl ( t1.ztrs, 0 ) yjjj,nvl ( t2.ztrs, 0 ) qyxf,nvl ( t3.ztrs, 0 ) dgmhs
from(SELECT tjrq,sum( ztrs ) ztrs FROM ( SELECT zrq, sjly, tjrq, min( ztrs ) ztrs FROM                                 A GROUP BY zrq, sjly, tjrq )where tjrq BETWEEN '20220814' and '20220914' and sjly='页面' GROUP BY sjly,tjrq) t1 
left join(SELECT tjrq,sum( ztrs ) ztrs FROM ( SELECT zrq, sjly, tjrq, min( ztrs ) ztrs FROM A         GROUP BY zrq, sjly, tjrq )where tjrq BETWEEN '20220814' and '20220914' and sjly='接口' GROUP BY sjly,tjrq) t2 on         t1.tjrq=t2.tjrq 
left join(SELECT tjrq,sum( ztrs ) ztrs FROM ( SELECT zrq, sjly, tjrq, min( ztrs ) ztrs FROM A     GROUP BY zrq, sjly, tjrq )where tjrq BETWEEN '20220814' and '20220914' and sjly='导入' GROUP BY sjly,tjrq) t3 on         t2.tjrq=t3.tjrq
order by t1.tjrq desc

虽说结果也是正确的,但无疑不是最优方案

使用pivot改造

select to_char(to_date(tjrq,'yyyymmdd'),'yyyy"年"mm"月"dd"日"') tjrq,nvl ( yjjj, 0 ) yjjj,nvl ( qyxf, 0 ) qyxf,nvl ( dgmhs, 0 ) dgmhs
from 
(select sjly,tjrq,sum(ztrs) ztrs from (SELECT zrq, sjly,tjrq, min( ztrs ) ztrs FROM         A GROUP BY zrq, sjly ,tjrq) group by sjly,tjrq
) 
pivot (max(ztrs) for sjly in ('页面' as yjjj,'接口' as qyxf,'导入' as dgmhs))
where tjrq BETWEEN '20220814' and '20220914'
order by tjrq desc

教程例子:贴图助理解

 unpivot

        列转行,就是将一行结果拆成多行显示

语法:

select 字段 from 数据集
unpivot(自定义列名/*列的值*/ for 自定义列名 in(列名))

如上图

可以使用union 或者union all 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_411576.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始学习opencv——在虚拟环境下安装opencv环境

毕设准备做cv相关项目,今天开始学习cv基础知识,课程为B站“【不要再看那些过时的OpenCV老教程了】2022巨献,OpenCV零基础小白最新版全套教程(人工智能机器视觉教程)” 1.在windows系统中某文件夹下安装虚拟环境: pip install vir…

软件工程师进入编程世界的55个锦囊:《 好代码 ,坏代码》

软件工程领域关于如何写出优秀代码的建议和观点非常多。但生活没有那么简单, 绝不只是尽可能多地吸取好的建议并严格遵守。由于不同来源的建议往往相互矛盾,我们怎么知道要听从哪个建议。更重要的是,软件工程并不是一门精确的科学,不可能将其…

Spring Security是什么? - 简单例子(三)

2、spring security中,安全配置通过继承WebSecurityConfigurerAdapter来配置 Configuration public class MyWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter{protected void configure(HttpSecurity http) throws Exception {//做大量的配置/…

万字深剖 Linux I/O 原理

目录传统艺能😎梅开二度🤔当前路径🤔三大输入输出流🤔系统文件 I/O🤔open😋open 返回值🤔close😋write😋read😋文件描述符fd😋对应关系&#x1f6…

【好书推荐】《Python编程:从入门到实践(第2版)》

第二版是2020年底发布的,第二版相比较第一版更新了不少新东西。 不错的python入门书,第一部分讲基础知识,第二部分讲了三个实际的项目:一个小游戏,一个数据可视化程序,一个网站。 可以方便地下载全书的源…

学习笔记-Kioptrix4-WalkThrough

Kioptrix4-WalkThrough 文章作者 xidaner & r0fus0d 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. 靶机地址 https://www.vulnhub.com/entry/kioptrix-level-13-4,25/ Description Again a long delay bet…

实验4 类与数组

实验任务51 #pragma once2 3 #include<iostream>4 #include<cassert>5 using std::cout;6 using std::endl;7 8 class vectorInt9 { 10 private: 11 /* data */ 12 int size; 13 int *p; 14 public: 15 vectorInt(int n); 16 vectorInt(int n,…

分布式光伏站远程监控组网解决方案

一、项目背景随着规模性的光伏电站陆续建设和投入运行&#xff0c;如何实时了解电站的运行状况&#xff0c;如何满足上一级系统或电网调度系统的监控需求成为了急需解决的事情。为使对分布式能源实现高效监控、满足电力接入电网要求、合理调配、集中监控、电网分析、配网自动化…

前端特效、js代码优化

1.旋转按钮边框 效果&#xff1a; 代码&#xff1a; <div class"container"><button class"btn">旋转边框</button></div>*{margin: 0;padding: 0;}.container{background: #000;height: 100vh;overflow: hidden;}.btn{/* borde…

35岁以后还能学软件测试吗?

之前看到一个问题“35岁学软件测试来得及吗”。 之前一直在工厂上班&#xff0c;看不到希望。 已经35岁了&#xff0c;想转学软件测试来得及吗&#xff1f; 经常会碰到类似这样的问题&#xff1a;担心自己学历不够&#xff0c;非计算机专业&#xff0c;害怕学不会&#xff0c;甚…

擎创技术流 | ClickHouse实用工具—ckman教程(1)部署安装

前言&#xff1a; 在数据量日益增长的当下&#xff0c;传统数据库的查询性能已满足不了业务需求。而Clickhouse在OLAP&#xff08;On-Line Analysis Processing——即一种在线分析处理的&#xff0c;用于数据分析的计算方法&#xff09;领域的应用&#xff0c;可以助力企业打造…

2022爱分析·虚拟化活动实践报告

报告编委 张扬 爱分析联合创始人&首席分析师 文鸿伟 爱分析高级分析师 **王鹏 ** 爱分析分析师 外部专家**&#xff08;按姓氏拼音排序&#xff09;** 梁瑛玮 保利威技术副总裁 于颢 tatameCEO 特别鸣谢&#xff08;按拼音排序&#xff09; 报告摘要 新冠疫…

Linux基础(yum,vim,gcc,gdb)

Linux基本的命令我们会敲了&#xff0c;基本的文件概念以及权限概念我们也都了解了&#xff0c;接下来该学一些好用的工具&#xff0c;用Linux完成一些工作了 目录 yum yum的作用 yum基本操作 vim vim的基本模式 命令模式 插入模式 底行模式 可视化模式 gcc gcc…

Drag-MoveMent

目录UGUI-OnDrag事件如何使用PointerEventDataposition屏幕空间->世界坐标/局部坐标空间(转换)参考文章UGUI-OnDrag事件 示例代码: using UnityEngine.EventSystems;public class TestOnDrag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler {public v…

java计算机毕业设计基于安卓Android的教学考勤系统APP

项目介绍 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库…

二叉查找树、平衡二叉树、红黑二叉树简单概念

二叉查找树&#xff08;二叉排序树、二叉搜索树&#xff09;&#xff1a; 性质&#xff1a; 1.若其左子树非空&#xff0c;则左子树上所有节点的值都小于根节点的值&#xff1b; 2.若其右子树非空&#xff0c;则右子树上所有节点的值都大于根节点的值&#xff1b; 3.其…

Kubectl

目录 一、资源管理 1.kubernetes集群管理 2.kubectl 3.kubectl 的命令 (1)查看版本信息 (2)查看资源对象简写信息 (3)查看集群信息 (4)配置kubectl自动补全 (5)node节点查看日志 (6)K8s核心组件日志 二、基本信息查看 1.查看master节点状态 2.查看命令空间 3.查看…

系统学习SpringFrame:SpringBean的注入方式

本篇内容包括&#xff1a;Spring 容器简介&#xff08;什么是容器、容器如何工作&#xff09;、SpringBean 注入方式&#xff08;SpringBean 注入方式分类、Autowiring 自动绑定&#xff09;以及 获取 Spring Bean 的工具类&#xff01; 一、Spring 容器 1、什么是容器 Sprin…

企业电子文档管理系统哪个好?怎么选?

选择一款企业电子文档管理系统&#xff08;EDMS&#xff09;时应该关注什么&#xff1f; 这完全取决于你需要实现的控制、协作和灵活性水平。 然而&#xff0c;有两个关键的电子文档管理系统功能是你应该要关注的。 ● 简单配置的工作流程 你可以更轻松地进行协作&#xff…