当前位置: 首页 > article >正文

pivot函数:数据行转换为列名(行转列)[oracle]

Oracle 中的 PIVOT 函数用于将行数据转换为列名,通常用于数据透视和报表生成。它允许你将某个列的值转换为多个列,并对这些列进行聚合操作

示例

原表:

SELECT * FROM orders;

使用pivot函数后:

SELECT *

FROM (

    SELECT product_id, quantity

    FROM orders

)

PIVOT (

    SUM(quantity)

    FOR product_id IN (10 AS Product10, 20 AS Product20, 30 AS Product30)

);

对比2张截图,可以看到,pivot函数实际上是将某一列的值转换成了几个列

其语法是:

....from 表

PIVOT (

    sum(需要聚合的字段)

    FOR column1 IN (value1 AS 新字段1, value2 AS 新字段2, ...)

);

将column1 字段里面的值value1 , value2等转换成了新字段,新字段下的数据就是sum(需要聚合的字段), pivot改变的是from 后面的表的结构

错误示例1

这条sql错误的原因:

pivot函数已经改变了orders这张表里面结构,即列名已经被改变,quantity列已经不存在

错误示例2

在 PIVOT 操作中,如果没有指定分组列,Oracle 会将所有其他列(除了用于透视的列和聚合的列)视为分组列.

此查询是对 orders 表进行透视操作,但没有指定一个明确的分组列。

用于透视的列:product_id

聚合的列:quantity

所以,分组列是:CUSTOMER_REF

聚合方法一:

使用一个子查询来显式地指定分组列,即

聚合方法二:

对查询结果使用sum()函数

这种方式需要对 PIVOT 后的结果集进行额外的聚合操作,性能比直接聚合方法一差


http://www.kler.cn/a/499974.html

相关文章:

  • DSP+Simulink——点亮LED灯(TMSDSP28379D)超详细
  • 【巨实用】Git客户端基本操作
  • Unity3d 基于Barracuda推理库和YOLO算法实现对象检测功能
  • Spring 中的常用注解
  • AR 眼镜之-拍照/录像动效切换-实现方案
  • Java手动打印执行过的sql
  • 深度学习-81-大语言模型LLM之基于litellm与langchain与ollama启动的模型交互
  • 解决WordPress出现Fatal error: Uncaught TypeError: ftp_nlist()致命问题
  • 复古黑白恐怖迷幻眼睛纹身刺青插画潮流艺术png免抠拼贴图片素材Mindrift. Psychedelic Illustrations
  • Springboot——钉钉(站内)实现登录第三方应用
  • C++实现设计模式---访问者模式 (Visitor)
  • 解决 VSCode 调试时 Python 文件出现相对路径报错问题‘FileNotFoundError’
  • Swift 趣味开发:查找拼音首字母全部相同的 4 字成语(上)
  • 智慧充电桩可视化管理提升能源效率
  • xml简介
  • Docker中安装Tailscale方法一
  • OceanBase数据库设计与管理:构建高效分布式数据架构基石
  • Stable diffusion的SDXL模型,针不错!(含实操)
  • git push报错 unauthorized email account cannot submit code
  • 老榕树的java专题:探索 Nacos:微服务架构中的配置与服务发现利器
  • 【ArcGIS微课1000例】0138:ArcGIS栅格数据每个像元值转为Excel文本进行统计分析、做图表
  • C语言基本知识复习浓缩版:控制语句--循环
  • 汽车免拆诊断 | 2017 款东风风神 AX7 车热机后怠速不稳