oracle行列转换方法汇总中对行列的值进行计算?

在数据库应用开发中,我们经常需要面对复杂的SQL式计算,行列转置就是其中一种。实现这类算法,Oracle可以使用pivot函数,但其他数据库没有相应的函数,因此代码比较难写,也不易理解和维护。另外,pivot函数只能实现固定列的转置,对于非固定列则无能为力,其他数据库同样无法实现非固定列的转置,通常都要求助于高级语言来实现动态SQL

用集算器实现此类算法会更加简洁易懂,下面用一个例子来说明。

数据库表SALES存储着订单数据,部分数据如下:

现在要计算出2013年各月份订单的总金额、最大订单金额、最小订单金额,以及总订单数,并将数据转置成134行,即:四种算法是第一列,列名为subtotal,每个月占一列,列名分别是1234…其中前五个字段如下:

A1:执行SQL,过滤出2013年的数据,并按月份分组汇总,结果如下:

这句SQL很简单,任何数据库都支持这种分组汇总,困难在于后续的行列置换。

上面这句代码生成一个空的序表,这个序表只有一个字段:subtotal,结果如下:

       说明:序表是集算器的一种数据类型,是带有结构的二维表,类似SQL数据表,但功能更强大,用法更灵活。另外,A1也是个序表。

上面这句代码在A2的基础上增加12个列,形成转置后的数据结构,结果如下:

函数derive可以给现有的序表增加新列,形成新的序表,比如derive(1)表示增加1列,字段名为1,字段值和列名相同,derive(0:field1,

A3-A5:对A1进行循环,每次访问一条记录,算法是将这条记录纵向拼接,并修改序表B2中对应的列。值得注意的是,只需要用缩进就能表达循环语句的作用范围,而不需要用{}begin/end来指定,因此B4B5在作用范围内,而A4A5不在作用范围。

说明:在集算器的循环体内,循环变量就是for语句所在的单元格。换句话说,可以用A3来引用当前记录,可以用A3.MONTH来引用当前记录的MONTH字段。

上面这句代码用来将当前记录的汇总字段纵向拼接起来,运算符“|”表示拼接,比如A112月份的记录拼接后是这样的:

上述代码的意义是:修改B2中的字段,数据来自B4

函数eval用来将字符串动态解析为表达式,比如eval("2+3")的计算结果是5,再比如本例中,循环到12月份时,eval中的字符串就是:B2.run(B4(#): #13),这表示按照B2的记录序号,依次将B4的成员插入B2的第13列(即12月份)。

#A3表示当前的循环计数,第一次循环时这个值等于1,第二次等于2,以此类推。

循环语句A3-B5执行后,B2中的数据就是最终的计算结果,前几列如下:

另外,集算器可被报表工具或java程序调用,调用的方法也和普通数据库相似,使用它提供的JDBC接口即可向java主程序返回ResultSet形式的计算结果,具体方法可参考相关文档。

王老师,03年硕士毕业于江南大学计算机应用专业。多年的软件开发、设计、管理经验,尤其对ORACLE有深入的学习和深刻理解,至今已有10年的ORACLE的开发、管理、调优的经验,从事过ORACLE相关的所有工作。曾经对上海市政府采购平台、河南移动经分系统、河南联通空中充值系统的ORACLE数据库进行总体设计和实施。

阿里巴巴前DBA,拥有丰富的Oracle实战经验,本课程为讲师10年经验。毫无保留,北风网作为老师的合作伙伴,独家推出高清版本“王二暖Oracle11g教室”培训课程,课程分为31部分,面向具有初步SQL基础、但没有系统全面接触Oracle的初学者,本培训课程深入讲解了Oracle11g使用和初步管理中的各种重要内容。

ORACLE11g的体系结构、ORACLE中的特有SQL语法、SQL语法深入分析、分区与索引、视图,触发器,函数,存储过程,游标等技术的使用、大对象的存取技巧、数据备份与移植、物化视图等重要内容(完整的内容介绍,参考“开篇部分 本视频课程简介”)。

该培训课程的内容、深浅程度、时间完全透明,可以观看“开篇部分 本视频课程简介”的详细介绍,可以看到具体培训内容、培训时间(精确到分钟)、并可试听部分内容。该培训课程全套31部分,占用3.32G。是极实用、全面、讲解细致的Oracle11g的课程。

知识点全面,覆盖11g使用和初步管理中的所有的重要内容

课程内容完全按照:例子+实验题目的模式

该培训课程的内容、课程的深浅程度、每部分占用的时间、课程讲解的具体内容先告知学员,这在培训界中绝无仅有

同类产品中,保证质量上乘,可以和任何其他培训进行对比

知识点解读极其细致,语言通俗易懂

“王二暖Oracle11g教室”培训课程的具体课程目录如下:

4.1 举例说明数据完整性的含义
4.2 维护数据完整性的五种方式的举例说明
4.3 建立主键的五种不同方式
4.4 完整性约束的习题讲解
4.5 给已有表添加、删除约束的方法

11.1 同义词的含义
11.2 共有同义词的建立和使用
11.3 私有同义词的建立和使用

12.2 建立序列(包括重要参数的含义)
12.4 更改、删除序列
12.5 程序中如何实现自增

14.1 索引的概念和作用
14.2 B树索引的工作原理(查询过程分析)
14.3 创建标准索引
14.4 如何分析索引中是否存在碎片和使用率
14.5 创建唯一索引、组合索引、反向键索引、位图索引
14.6 基于函数的索引
14.7 重建索引的条件和方法
14.9 获取索引信息的视图

17.2 数据字典基本表怎么被创建的
17.3 数据字典视图是什么?怎么被创建的

18.1 在线日志文件的作用
18.2 数据库归档方式的转换
18.4 归档中,被废弃的早期的初始化参数
18.5 联机日志文件和联机日志文件组
18.6 联机日志文件组的四种常见状态
18.7 增加、清除联机日志文件
18.8 自动归档、手工归档

20.1 创建过程的语法
20.2 过程参数的三种模式
20.3 在两种方式下(Sql*Plus中和其他过程内),执行过程的方法
20.4 执行过程的权限
20.5 创建函数的语法
20.6 函数的课堂题目和解答
20.7 函数和过程的比较

24.1 java程序中调用Oracle11g中的没有返回参数的存储过程(插入记录)
24.2 java程序中调用Oracle11g中的没有返回参数的存储过程(更新记录)
24.3 java程序中调用Oracle11g中的有返回参数的存储过程(查询记录)
24.5 java程序中调用Oracle11g中的分页存储过程(存储过程返回分页的列表)

30.1 物化视图的发展、简介
30.2 物化视图的作用
30.3 创建物化视图的权限
30.4 创建物化视图的选项
30.5 基于主键的物化视图

第31部分 使用物化视图和exp实现生产库的逻辑备份的例子

打赏 微信扫一扫 支付宝扫一扫

工作时间:周一至周五,9:30-18:30,节假日休息

请查看头部文章来源地址!本站所有内容均为互联网收集整理和网友上传。仅限于学习研究,切勿用于商业用途。否则由此引发的法律纠纷及连带责任本站概不承担。

智能核验测温手持机 UPDA

UCloud人脸识别测温手持机具有灵巧、便携、采集速度快,功能模块化、灵活配置等特点,是结合人脸识别、红外测温,人脸检测、二维码识别为一体的智能AI产品。

回答:谢邀。C语言已经是非常简洁的编程语言了,数组肯定不是多余的语法了。可以说,数组基本上是所有现代高级编程语言不可或缺的语法了。但是C语言中的数组并不难,题主也不用太担心自己学不会。我的上一个回答,讨论了C语言中的结构体,它是一种复合数据类型,有了结构体,C语言可以应对各种复杂的数据模型,比如上一节的平行四边形问题。但是有些问题,就算是结构体,也很难解决。请看下面这个问题:小明班级有

回答:问题比较模糊,只能泛泛的说几句。需求从功能需求反推对开发板的需求,大致如下:支持摄像头输入。有足够的CPU算力和存储空间,以便运行二维码识别库。建议树莓派(带摄像头)运行安卓;树莓派(带摄像头)运行Linux;若无特殊要求,建议使用安卓系统,可选的识别库较多,如ZXing。若不能使用安卓,则需选好一个合用的二维码识别库,可考虑ZBar。具体问题还需具体分析,以上泛泛之谈,供参考。

回答:试试中琅条码软件,软件中数据库导入的方式有很多,如TXT、excel、MySQL,SQLServer、access等多种常用数据库类型,可以连接这些数据库实现批量制作各种条码二维码标签,下面介绍下如何用中琅条码软件连接SQLServer数据库批量制作产品二维码。运行中琅条码软件,新建一个空白标签,打开数据库设置,添加一个SQLServer数据源,配置好SQLServer数据库连接,测试连接后添加。...

回答:- Web 基础曾经开源中国创始人红薯写了一篇文章「初学 Java Web 开发,请远离各种框架,从 Servlet 开发」,我觉得他说的太对了,在如今 Java 开发中,很多开发者只知道怎么使用框架,但根本不懂 Web 的一些知识点,其实框架很多,但都基本是一个套路,所以在你学习任何框架前,请把 Web 基础打好,把 Web 基础打好了,看框架真的是如鱼得水。关于 Http 协议,这篇文章就写得...

  • 一、题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二、思路分析 首先...

  • ...维计算;再比如说,sklearn中导入特征矩阵,必须是至少二维;特征选择的目的是通过降维来降低算法的计算成本……这些语言都很正常地被我用来使用,直到有一天,一个小伙伴问了我,维度到底是什么?我…… 我认真思...

  • ...ize; layers.mapview.addChild(bitMap); } } }; 这里我们通过二维数组做了地图的映射。0和1代表普通道路和墙,2和3代表星星和岩浆。区别在于一类是不动的一类是动的。LBitmapData用作裁剪接收图片对象、起始坐标和裁剪区域五个参...

  • ...组进行哈希。我们可以用一个四维数组(其实完全可以用二维,左边僧人妖怪的数量确定后,相应地就能计算右边了,需要多一步运算),假设左岸僧人和妖怪数量分别是 a 和 b,右岸僧人妖怪数量分别是 c 和 d,那么我们可以...

  • ...icant digit first)LSD中没有数值之间的比较。建立一个[10][]的二维数组arr。挑选出要排序数组中最大的数字,计算该数字的位数记为digitNum。将数组中的所有数字填充到digitNum位,位数不够的高位补0。然后遍历digitNum次,从低位开始...

  • ...(自主编写游戏所需要的知识): 1.函数的基本实现; 2.二维数组; 目录 扫雷 1.基本界面的实现 2.初始化棋盘(二维数组) 3.棋盘的打印 4.布置雷 5.安全保护 6.雷数显示 7.排查雷 8.标记雷 9.展开 10.难度设置 11.全局代码 扫雷 效...

  • ...论简介 建立初始堆 首末元素互换, 即得到最大元素放入数组最末尾. 调整堆. 第二步的操作明显会将堆破坏, 所以需要调整堆. 跳回第二步. 建立初始堆 在建堆之前需要将数组转成二叉树图, 方便理解: 如果将父>左子|右子当做树...

  • ...种情况下,学习pandas会非常有用,这里我们说的数据都是二维的table,在pandas中也称作dataframe。pandas中其实一共有三种类型的常见数据: 数据结构 维度 说明 Series 1 类似list,一维数组 Data Frames 2 最常见的二维数据结构,exce...

我要回帖

更多关于 oracle行列转换方法汇总 的文章

 

随机推荐