oracle 行列转换 pivot

oracle 行列转换 pivot

记录下工作中遇到的行列转换的用法

         话不多说,直接上例子

       oracle 行列转换 pivot


       先看下表结构,上表为流程环节表,记录了每个流程每一步的时间,现业务需要把每一个流程每一步时间显示到一行

       最后要实现的效果如下图


        oracle 行列转换 pivotoracle 行列转换 pivot


       下面说下我当时的思路,当时不知道有函数可以用,自己想了个办法,如下 sql 语句以及查询结果


oracle 行列转换 pivot  

oracle 行列转换 pivot

通过这样查询,可以增加需要的列数,但是行数还是多行,继续考虑可以通过分组,来合并相同的行

             按照main_id 分组,把每个时间 wm_concat 一下,后来发现不行,因为有退回的流程,相同步骤会有好几个,

          最后想到,通过 max 函数,(确定列中的最大值(最小值)时,MAX( ) MIN( )函数忽略NULL值 ),而且有多个

          时间的情况,可以只选出最早的或者最近的,最终实现了效果如下:

oracle 行列转换 pivot

oracle 行列转换 pivot

 select wt.main_id,

           max(case wt.state_name when ‘申请’

                              then to_char(end_time,’yyyy-MM-dd hh24:mi:ss’) else ” end) 申请时间,

            max (case wt.state_name when ‘审核’

                              then to_char(end_time,’yyyy-MM-dd hh24:mi:ss’) else ” end) 审核时间,

              max(case wt.state_name when ‘审批’

                              then to_char(end_time,’yyyy-MM-dd hh24:mi:ss’) else ” end) 审批时间

                         from Wf_Tache wt where wt.flow_key = ‘depApplyOvertime’ group by main_id


再后来,在网上发现相似的写法,用的是decode 代替 case when,是一样的,不过看起来更简洁

oracle 行列转换 pivotoracle 行列转换 pivot


而且网上还有一种更简便的方法,oracle 11g 后有 pivot / unpivot 函数 来实现行列转换,具体如下

       oracle 行列转换 pivot


 具体函数用法,网上搜索,有很多,这里就不再说了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111321.html原文链接:https://javaforall.net

(0)
上一篇 2021年8月31日 上午7:00
下一篇 2021年8月31日 上午8:00


相关推荐

  • Cadence 电源完整性仿真实践(一)

    Cadence 电源完整性仿真实践(一)

    2021年11月29日
    63
  • AD转换基本原理

    AD转换基本原理提示 以下是本篇文章正文内容 下面内容仅供参考一 AD 的基本概念 AD 转换是将时间连续和幅值连续的模拟量转换为时间离散 幅值也离散的数字量 使输出的数字量与输入的模拟量成正比 AD 转换的过程有四个阶段 即采样 保持 量化和编码 采样是将连续时间信号变成离散时间信号的过程 经过采样 时间连续 数值连续的模拟信号就变成了时间离散 数值连续的信号 称为采样信号 采样电路相当于一个模拟开关 模拟开关周期性地工作 理论上 每个周期内 模拟开关的闭合时间趋近于 0 在模拟开关闭合的时刻 采样时刻 我们就 采 到模

    2026年3月26日
    2
  • larave5.6 将Excel文件数据导入数据库代码实例

    larave5.6 将Excel文件数据导入数据库代码实例

    2021年10月24日
    42
  • Unity 对话系统Fungus教程(使用心得)

    Unity 对话系统Fungus教程(使用心得)前言 借用别人一句话 万事儿开头难 枪在手 不得不发 因缘巧合之下误入了 unity 这片完全陌生 让我头痛欲裂的世界 但因比赛在即 不得不学 在做剧情的时候 发现使用 unity 十分繁琐复杂 这时发现了 Fungus 对话系统这个插件 仿若捡了宝贝 有了 ta 做起剧情来水到渠成 而且操作简单 功能强大 然而 网上关于 fungus 的讲解与教程翻来覆去就那几个 用的人也不多 放着这么好用的

    2026年3月19日
    4
  • 【Unity3D 灵巧小知识点】 ☀️ | 切换场景后保留上个场景中的游戏物体不被销毁

    【Unity3D 灵巧小知识点】 ☀️ | 切换场景后保留上个场景中的游戏物体不被销毁Unity小科普老规矩,先介绍一下Unity的科普小知识:Unity是实时3D互动内容创作和运营平台。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。Unity平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。也可以简单把Unity理解为一个游戏引擎,可以用来专业制作游戏!Unity小知识点学习切换场景后保留上个场景中的.

    2022年5月20日
    53
  • java线程join方法

    java线程join方法java线程join方法1.join方法​ join方法的作用是进行线程插队,也就是说调用了join方法的线程相对于调用它的上级线程拥有跟高的执行权。调用join方法的线程的上级线程必须等待调用join方法的线程执行完成才能继续执行。举个小例子:publicclasstestjoin{ publicstaticvoidmain(String[]args)throwsI…

    2022年5月5日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号