`

知识备忘—ORACLE纯粹行列转换

阅读更多
ORACLE 纯粹行列转换!!

转换前:
select * from test;
A  B  C
-- -- --
1  2  3
2  2  4
4  3  3
3  1  6
4  3  6
6  5  9
8  8  8
转换后:
A            B              C               D             E
------------ -------------- --------------- ------------- -------------
1            2              4               3             4
2            2              3               1             3
3            4              3               6             6
方法:(有三种)
  --1:牛X的方法(悟其精髓确有难度)
  select regexp_substr(str, '[^,]+', 1, 1) a,
         regexp_substr(str, '[^,]+', 1, 2) b,
         regexp_substr(str, '[^,]+', 1, 3) c,
         regexp_substr(str, '[^,]+', 1, 4) d,
         regexp_substr(str, '[^,]+', 1, 5) e
    from (select regexp_substr(str, '[^(\.)]+', 1, rownum) str
            from (select max(a) || '.' || max(b) || '.' || max(c) str
                    from (select substr(sys_connect_by_path(a, ','), 2) a,
                                 substr(sys_connect_by_path(b, ','), 2) b,
                                 substr(sys_connect_by_path(c, ','), 2) c
                            from (select rownum child,
                                         a,
                                         b,
                                         c,
                                         lead(rownum, 1) over(order by rownum) parent
                                    from test) t
                           start with child = 1
                          connect by prior parent = child))
          connect by rownum < length(regexp_replace(str, '[^(\.)]', '')) + 2);
  --2:正常的方法(大家都想的到)        
  select *
    from (select a a1,
                 lead(a, 1) over(order by rownum) a2,
                 lead(a, 2) over(order by rownum) a3,
                 lead(a, 3) over(order by rownum) a4,
                 lead(a, 4) over(order by rownum) a5,
                 lead(a, 5) over(order by rownum) a6
            from test)
   where rownum = 1
  union
  select *
    from (select b a1,
                 lead(b, 1) over(order by rownum) a2,
                 lead(b, 2) over(order by rownum) a3,
                 lead(b, 3) over(order by rownum) a4,
                 lead(b, 4) over(order by rownum) a5,
                 lead(b, 5) over(order by rownum) a6
            from test)
   where rownum = 1
  union
  select *
    from (select c a1,
                 lead(c, 1) over(order by rownum) a2,
                 lead(c, 2) over(order by rownum) a3,
                 lead(c, 3) over(order by rownum) a4,
                 lead(c, 4) over(order by rownum) a5,
                 lead(c, 5) over(order by rownum) a6
            from test)
   where rownum = 1;
  --3:方法太多了
  select max(decode(rn, 1, a, null)) id1,
         max(decode(rn, 2, a, null)) id2,
         max(decode(rn, 3, a, null)) id3,
         max(decode(rn, 4, a, null)) id4,
         max(decode(rn, 5, a, null)) id5,
         max(decode(rn, 6, a, null)) id6
    from (select a.*, rownum rn from test a)
  union
  select max(decode(rn, 1, b, null)) id1,
         max(decode(rn, 2, b, null)) id2,
         max(decode(rn, 3, b, null)) id3,
         max(decode(rn, 4, b, null)) id4,
         max(decode(rn, 5, b, null)) id5,
         max(decode(rn, 6, b, null)) id6
    from (select a.*, rownum rn from test a)
  union
  select max(decode(rn, 1, c, null)) id1,
         max(decode(rn, 2, c, null)) id2,
         max(decode(rn, 3, c, null)) id3,
         max(decode(rn, 4, c, null)) id4,
         max(decode(rn, 5, c, null)) id5,
         max(decode(rn, 6, c, null)) id6
    from (select a.*, rownum rn from test a);
end p_test_row;

(注明)以上为网络搜集资料
--4:我的方法:
select sum(decode(rn, 1, b, null))/6 id1,
       sum(decode(rn, 2, b, null))/6 id2,
       sum(decode(rn, 3, b, null))/6 id3,
       sum(decode(rn, 4, b, null))/6 id4,
       sum(decode(rn, 5, b, null))/6 id5,
       sum(decode(rn, 6, b, null))/6 id6
from test
分享到:
评论

相关推荐

    oracle存储过程学习经典入门

    关于 Oracle 存储过程的若干问题备忘 在学习 Oracle 存储过程时,需要了解一些常见问题的解决方法。例如,在 Oracle 中,数据表别名不能加 as。在存储过程中,select 某一字段时,后面必须紧跟 into,如果 select ...

    Oracle Olap开发备忘录

    9i低版本需要注意 &lt;br&gt;oracle.express.mdm.MdmMetadataProvider与 &lt;br&gt;oracle.olapi.metadata.mdm.MdmMetadataProvider之间的转换,可使用 &lt;br&gt;oracle.express.mdm.MdmMetadataProvider....

    oracle 数据库工作备忘录

    Oracle数据库工作备忘录 Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,由甲骨文公司(Oracle Corporation)开发。它以其高效、稳定和强大的功能著称,被广泛应用于金融、电信、政府和各类企业的...

    常用oracle语句备忘

    这篇“常用Oracle语句备忘”将带你深入理解Oracle SQL的基本概念和常见操作,以提升你在数据库管理中的技能。 1. **Oracle SQL基础** Oracle SQL是用于与Oracle数据库交互的语言,它包括了DML(Data Manipulation ...

    备忘录VNT文件转换为TXT文件

    如果有多份备忘录需要转换,可能还支持批量转换功能,以节省用户的时间。 总的来说,VNT到TXT的转换是一个涉及文件解析、数据解码和编码转换的技术过程。这个转换工具对于那些希望在不同设备上访问和管理三星手机...

    公务员考试公共基础知识备忘汇总

    提供公务员考试的各类公共基础知识备忘总结,具有一定的使用价值。

    【问题备忘】求行列式值:不能调试pyx文件_SagePyCharm

    【问题备忘】求行列式值:不能调试pyx文件_SagePyCharm: 有些source code是cython写的, 编成pyd文件被其他python 调用, 想调试学习一下,跟到cython里面,可惜试了pycharm, vs2017 都无法step into cython的...

    微信小程序 备忘录 (源码)

    微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小...

    电子备忘录java基础知识综合实例包含大部分基础知识

    在电子备忘录的Java基础知识综合实例中,我们主要探讨的是如何使用Java语言来构建一个图形用户界面(GUI)的应用程序。GUI是用户与计算机进行交互的重要方式,它通过按钮、文本框、菜单等可视化元素使得操作更加直观...

    小程序源码 备忘录 (代码+截图)

    小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+...

    微信小程序源码 备忘录(学习版)

    微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习...

    Android 备忘录源码.rar

    本文将深入探讨如何基于Android平台开发一个备忘录应用,通过分析“Android 备忘录源码.rar”中的代码,我们可以学习到以下几个关键知识点: 1. **用户界面设计**:从项目中包含的图片资源(如1_120916130147_1.png...

    桌面备忘录(可放在桌面的备忘录)

    【标题】:“桌面备忘录(可放在桌面的备忘录)”是一款便捷的桌面工具,旨在帮助用户轻松记录日常生活和工作中的重要事项。这款备忘录软件设计精巧,可以直接放置在桌面上,便于随时查看和编辑,提高了工作效率与...

    oracle用户下.bash_profile文件修改

    本文档即为在安装Oracle时,对oracle用户下的.bash_profile文件进行修改的具体内容备忘。 首先,我们需要了解.bash_profile文件的作用。该文件是bash shell的配置文件之一,在用户登录时被读取执行,用于设置用户的...

    oracle创建用户(备忘)

    在Oracle数据库管理中,创建用户是一项基础且重要的任务。用户是数据库系统中的主体,拥有访问数据库对象的权限。本文将详细讲解如何在Oracle环境中创建用户,以及与之相关的概念和步骤。 首先,Oracle数据库中的...

    微信小程序 小工具类 备忘录 (源代码+截图)

    微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源...

    简易安卓备忘录

    【简易安卓备忘录】是一个基于Java编程语言开发的Android应用程序,主要功能是提供一个便捷的备忘录服务。这个项目对于初学者来说是一个很好的学习资源,它可以帮助理解Android应用的基本架构、Java语言在移动平台上...

    备忘录,免费桌面备忘录,M备忘

    今天我们要介绍的这款软件——“备忘录,免费桌面备忘录,M备忘”,就是其中的一个典型例子。 这款备忘录软件的开发者经过了十年的潜心研发和不断更新,再次将其作品分享给大众。这款软件基于MFC(Microsoft ...

    最好用的备忘录 桌面备忘录

    而"备忘录.exe"则是编译后的可执行文件,用户双击即可启动备忘录应用,无需编程知识即可直接使用。 除了基本的备忘录功能,这款软件还可能包含了一些高级特性,如定时提醒、任务分类、搜索功能等。定时提醒可以设置...

    Android开发备忘录

    设计和实现一个类似个人备忘录的 Android APP ,数据库采用 SQLite (也可以直接访问 Web 端 MySQL 数据库、或提供 Web 接口访问 MySQL 数据库)。 1.用户注册和登录(这类 APP 一般面对个人,用户不需要分类别); ...

Global site tag (gtag.js) - Google Analytics