首页 > 数据库 >ORACLE PIVOT函数

ORACLE PIVOT函数

时间:2023-07-25 12:56:51浏览次数:35  
标签:GROUP 聚合 函数 字段 子句 ORACLE PIVOT

 

 

语法

 

 

   函数用途: PIVOT函数被用于SELECT子句中,在查询时将行转换成列,并在由行转列时对对应数据进行聚合统计.一般使用PIVOT操作后结果集将比原结果集包含更多的列,以及更少的行。

   计算步骤:     

 

  • 1.PIVOT函数计算位于PIVOT子句起始位置的聚合函数。使用聚合函数必须要定义一个GOURP BY 子句以返回分组统计值,但在PIVOT函数中不显式使用GROUP BY 子句,实际上PIVOT函数使用隐式(默认)的 GROUP BY 子句。默认GROUP BY 使用的分组字段为在PIVOT子句中未使用到的所有字段,以及将要行转列的字段里所有的值。即除了聚合函数里以外的所有字段,以及比如将要行转列的字段(假设NAME字段)里的所有不同值,都是PIVOT函数里默认GROUP BY 使用的分组字段。如果在PIVOT函数中定义了多个聚合函数,那么则必须为除一个以外的所有其他聚合函数重命名(即只允许有一个聚合函数不进行重命名操作)。

  • 2.分组列以及聚合字段在第一步计算这后将以以下方式输出结果集:
       a .PIVOT函数中未出现的所有的隐式分组字段按以下方式计算展示:
       b.结果集中新输出的列与PIVOT函数中的PIVOT_IN_CLAUSE参数相关。PIVOT_IN_CLAUSE参数代表要转成列的行的所有不同值。比如要将NAME 字段里的行值:FEDERER,NADAL,NOVAK三个值转成三个字段(列),那么PIVOT_IN_CLAUSE参数位置即是FEDERER,NADAL,NOVAK值,最终这个参数里的所有值将被转换成列(字段)值。如果PIVOT函数里的XML参数值 被定了XML关键字,结果集将被输出为仅为一个字段的XML字符串。(关于PIVOT函数的含XML关键字的形式,以及与XML关键配合使用的expr,subquery,any参数,可自行参考文档,目前没用过,暂不叙述,后续有用到再补充)。PIVOT_IN_CLAUSE参数中可以为每个要转列并聚合计算的值重命名,不进行重命名时,其行值即为新列名称。注意ORACLE所有表、字段命名长度不能超过30 byte,否则会报ORA_00918错误。
       示例
       通过安装oralce默认创建的oe.orders进行查询:

     

CREATE TABLE pivot_table AS
SELECT * FROM
(SELECT EXTRACT(YEAR FROM order_date) year, order_mode, order_total FROM oe.orders)
PIVOT
(SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));
SELECT * FROM pivot_table ORDER BY year;


   EXTRACT语句查询集:

   PIVOT函数对EXTRACT语句查询集的ORDER_DATE列值行转列操作后:


   EXTRACT函数仅将ORDERDATE 字段转为年份形式。PIVOT函数将子表(三个字段:YEAR,ORDERMODE,ORDERTOTAL)中的ordertotal进行聚合(即aggregatefunction参数),要转为列的是ORDERMODE字段(即PIVOT_FOR_CLAUSE参数)中的'direct','online'两个行值,(即PIVOT_IN_CLAUSE参数)此时分组字段默认为YEAR,以及direct,online.即GROUP BY YEAR,DIRECT,ONLINE(GROUP BY 不支持别名)。

 

参考文档 ORALCE官网 SQL Language Reference:https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/About-SQL-Functions.html#GUID-D51AB228-518C-4213-8BD4-F919623D105E

标签:GROUP,聚合,函数,字段,子句,ORACLE,PIVOT
From: https://www.cnblogs.com/rogerfederer/p/17579614.html

相关文章

  • 包含min函数的栈
    title:包含min函数的栈date:2023-07-2511:50:19tags:-c/c++categories:-算法-笔试top:包含min函数的栈题目来自acwing题目(点击跳转)设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。push(x)–将元素x插入栈中pop()–移除栈顶元素top......
  • OSql命令操作函数(可用于安装程序的时候数据库脚本执行)
    ///<summary>///OSql命令操作函数(可用于安装程序的时候数据库脚本执行)///</summary>publicclassSqlScriptHelper{#regionOSql操作函数///<summary>///本地执行SQL脚本///</summary>///<paramname=......
  • oracle数据库临时表空间损坏,报错ORA-01116,ORA-01110 ,ORA-27041,ORA-06512的解决方式
     打脚本的时候报错:ORA-01116:打开数据库文件203时出错ORA-01110:数据文件203:'/u01/app/oracle/oradata/temp02.dbf'ORA-27041:无法打开文件Linux-x86_64Error:2:NosuchfileordirectoryAdditionalinformation:3ORA-06512:在line9  是我们环境的临时表空间......
  • 学习CALCULATE函数(二)修订版
    之前呢,白茶分享了一些CALCULATE的心得,但是要知道我们在对数据进行分析的时候,往往是多条件参考的,比如说哪个区域、哪个时间点、哪个状态的销售的最好,这就很明显需要我们在计算的时候把这些选项算进去。在纸上计算很容易,但是DAX中如何进行呢?来,看下面的例子:这是我们在上一期使用的示例......
  • 函数周期表丨时间丨表丨CALENDAR
    CALENDAR函数语法=CALENDAR(<开始日期>,<结束日期>)CALENDAR函数,属于常用的**“表函数”**之一,一般用于生成日期维度。也可以用来构建虚拟的日期表进行计算。参数第一参数:开始日期。第二参数:结束日期。返回结果一个具有单个“日期列”表,这个日期列包含开始与结束日期。并且是连续......
  • 函数周期表丨时间丨值丨DATE
    DATE函数语法=DATE(<年>,<月>,<日>)DATE函数,属于“值函数”之一,返回某个具体的日期。用的频率不是特别的高,一般用来限定时间使用,比如说从哪一天开始,或者哪一天结束。参数第一参数:年。通常情况下,年份这一项一般情况都是需要输入四位数,并且日期要大于1900年3月1日以后的日期。如果......
  • 学习CALCULATE函数(一)修订版
    有位大佬曾经告诉过我,如果你深入理解了CALCULATE,那么你就相当于理解了DAX函数的基础,因为它是DAX函数中最灵活多变,也是适应性最强的函数之一。CALCULATE的语法结构DAX=CALCULATE(<expression>,<filter1>,<filter2>...)第一参数是计算的表达式,可以进行各种聚合运算从第二参开始,是一......
  • openpyxl模块-------------------------------函数公式应用
    求和代码:#!/usr/bin/envpythonfromopenpyxlimportWorkbookbook=Workbook()sheet=book.activerows=((34,26),(88,36),(24,29),(15,22),(56,13),(76,18))forrowinrows:sheet.append(row)cell=sheet.cell(row=7,column=2)cell.va......
  • PHP输出函数不同之处
    输出打印函数:echo、print、print_r()、printf()、sprintf()、var_dump()、var_export()1)echo、print相同:都不是函数,而是语言结构。可以不用括号无法输出数组不同:echo接受多个参数;print仅接受一个返回值echo没有返回值;print始终返回12)printf()、sprint......
  • 函数周期表丨时间智能丨表丨DATESBETWEEN
    DATESBETWEEN函数DATESBETWEEN函数隶属于“时间智能函数”,属于“表”函数。可以用作生成固定范围的日期,也可以用来作为限定条件来对聚合计算进行限制。在业务需求中,有时候需要将数据与上一阶段的数据进行对比,注意,这里说的是一个阶段,不是一个点;还有一种情况是需要用一段时间的数据作......