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

[Oracle] UNPIVOT 列转行

Oracle数据库中的UNPIVOT是一种用于将列转换为行的SQL操作,它允许用户将多个列的数据转换为多行的形式,以便进行更灵活的数据分析和报表生成

UNPIVOT主要用于将宽表(多列)转换为长表(多行),减少表的列数,增加行数

语法格式

SELECT pivot_column, value_column
FROM (SELECT column1, column2, column3, ...   FROM table_name)
UNPIVOT (value_column FOR pivot_column IN (column1 AS alias1, column2 AS alias2, ...)
)

参数说明

value_column:存放原列值的新列名
pivot_column:存放原列名的新列名,是转换后行数据中列标题(即原列名)所在的列的名称
IN子句中列出了需要被转换的列,以及它们转换后的别名(可选)

示例

假设我们有一个名为sale_data的表,其结构如下:

product_idjan_salesfeb_salesmar_sales
1100015002000
280012001800

我们想要将这些销售数据转换为多行的形式,以便进行更方便的数据分析,可以使用UNPIVOT来实现这一转换,具体的SQL语句如下:

SELECT product_id, month, sales  
FROM   (SELECT product_id, jan_sales, feb_sales, mar_sales   FROM sale_data)   
UNPIVOT   (sales FOR month IN (jan_sales AS 'January', feb_sales AS 'February', mar_sales AS 'March'))

执行上述SQL语句后,将得到以下结果:

product_idmonthsales
1January1000
1Febuary1500
1March2000
2January800
2Febuary1200
2March1800

提示Tips

① 源表数据列的数据类型需要保持一致,否则可能会出现转换失败的情况

http://www.xdnf.cn/news/17541.html

相关文章:

  • Linux kernel network stack, some good article
  • Day 37:早停策略和模型权重的保存
  • 《番外:Veda的备份,在某个未联网的旧服务器中苏醒……》
  • Mybatis学习之缓存(九)
  • 从零开始的云计算生活——第四十一天,勇攀高峰,Kubernetes模块之单Master集群部署
  • Seata
  • vue+django 大模型心理学智能诊断评测系统干预治疗辅助系统、智慧心理医疗、带知识图谱
  • EXISTS 替代 IN 的性能优化技巧
  • 前端灰度发布浅析
  • 【C++语法】输出的设置 iomanip 与 std::ios 中的流操纵符
  • 【stm32】EXTI外部中断
  • IoT/实现和分析 NB-IoT+DTLS+PSK 接入华为云物联网平台IoTDA过程,总结避坑攻略
  • 运维学习Day21——LAMP/LNMP 最佳实践
  • Python day 41
  • Linux 流编辑器 sed 详解
  • Linux-常用命令
  • Apache IoTDB 全场景部署:跨「端-边-云」的时序数据库 DB+AI 实战
  • 人工智能与农业:农业的革新
  • 超算中心的一台服务器上有多少个CPU,多少个核?
  • Spring JDBC
  • 构建轻量级Flask Web框架:从入门到实践
  • Spring Cloud Gateway 路由与过滤器实战:转发请求并添加自定义请求头(最新版本)
  • st.session_state 的存储机制
  • Docker中ES安装分词器
  • docker集群
  • USB 标准请求
  • gophis钓鱼流程
  • SSM+Dubbo+Zookeeper框架和springcloud框架,写业务的时候主要区别在哪?
  • 如何理解Tomcat、Servlet、Catanalina的关系
  • 【AI论文】R-Zero:从零数据起步的自进化推理大语言模型