Oracle实现竖表转横表的几种常用方法小结
有能耗表,记录各个城市水、电、热的能耗情况,表结构如下:
名称 | 类型 | 备注 |
---|---|---|
E_CODE | VARCHAR2(10) | 城市的CODE |
E_VALUE | NUMBER | 能耗值,包括水耗、电耗、热耗 |
E_TIME | VARCHAR2(20) | 时间 |
E_TYPE | NUMBER | 能耗类型,0:水耗,1:电耗,2:热耗 |
插入测试数据,如下:
E_CODE | E_VALUE | E_TIME | E_TYPE |
---|---|---|---|
BJ | 20.05 | 2018-08-29 01:00:00 | 0 |
BJ | 36.35 | 2018-08-29 01:00:00 | 1 |
BJ | 45.223 | 2018-08-29 01:00:00 | 2 |
SH | 22.95 | 2018-08-29 01:00:00 | 0 |
SH | 18.4556 | 2018-08-29 01:00:00 | 1 |
SH | 33.254 | 2018-08-29 01:00:00 | 2 |
GZ | 48.554 | 2018-08-29 01:00:00 | 0 |
GZ | 21.112 | 2018-08-29 01:00:00 | 1 |
GZ | 25.625 | 2018-08-29 01:00:00 | 2 |
上面的表格是一张竖表,而我们想得到的是横表,即行转列,获得如下结果
编号 | 时间 | 水耗 | 电耗 | 热耗 |
---|---|---|---|---|
SH | 2018-08-29 01:00:00 | 22.95 | 18.4556 | 33.254 |
GZ | 2018-08-29 01:00:00 | 48.554 | 21.112 | 25.625 |
BJ | 2018-08-29 01:00:00 | 20.05 | 36.35 | 45.223 |
实现竖表转横表的查询,即行转列,通常有两种常用方法。
第一种:使用decode实现
SELECT E_CODE, E_TIME, SUM( DECODE(E_TYPE, 0, E_VALUE) ) AS WATER_ENERGY,--水耗 SUM( DECODE(E_TYPE, 1, E_VALUE) ) AS ELE_ENERGY,--电耗 SUM( DECODE(E_TYPE, 2, E_VALUE) ) AS HEAT_ENERGY--热耗 FROM THTF_ENERGY_TEST GROUP BY E_CODE,E_TIME
输出如下:
E_CODE | E_TIME | WATER_ENERGY | ELE_ENERGY | HEAT_ENERGY |
---|---|---|---|---|
SH | 2018-08-29 00:00:00 | 22.95 | 18.4456 | 33.2540 |
GZ | 2018-08-29 00:00:00 | 48.5540 | 21.1120 | 25.6250 |
BJ | 2018-08-29 00:00:00 | 20.05 | 36.35 | 45.2230 |
第二种:使用case when实现
简单case when函数:
SELECT E_CODE, E_TIME, SUM( CASE E_TYPE WHEN 0 THEN E_VALUE ELSE 0 END ) AS WATER_ENERGY,--水耗 SUM( CASE E_TYPE WHEN 1 THEN E_VALUE ELSE 0 END ) AS ELE_ENERGY,--电耗 SUM( CASE E_TYPE WHEN 2 THEN E_VALUE ELSE 0 END ) AS HEAT_ENERGGY--热耗 FROM THTF_ENERGY_TEST GROUP BY E_CODE,E_TIME
输出结果同上:
E_CODE | E_TIME | WATER_ENERGY | ELE_ENERGY | HEAT_ENERGY |
---|---|---|---|---|
SH | 2018-08-29 00:00:00 | 22.95 | 18.4456 | 33.2540 |
GZ | 2018-08-29 00:00:00 | 48.5540 | 21.1120 | 25.6250 |
BJ | 2018-08-29 00:00:00 | 20.05 | 36.35 | 45.2230 |
CASE WHEN函数功能很强大、实用,使用起来也简单易懂。在此篇文章详细介绍:CASE WHEN 用法详解
到此这篇关于Oracle实现竖表转横表的几种常用方法小结的文章就介绍到这了,更多相关Oracle 竖表转横表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Windows系统下Oracle 11g完全卸载教程(推荐!)
安装软件是首要,虽然不是特别重要,但是错误的安装也是相当费劲和抓狂的,所以这篇文章主要给大家介绍了关于Windows系统下Oracle 11g完全卸载的相关资料,文中通过图文介绍的非常详细,要的朋友可以参考下2024-06-06Oracle中Union与Union All的区别(适用多个数据库)
如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来2012-07-07oracle创建删除用户示例分享(oracle删除用户命令及授权)
这篇文章主要介绍了oracle创建删除用户示例还有oracle删除用户命令及授权的使用,需要的朋友可以参考下2014-03-03使用geotools导入shp文件到Oracle数据库时表名带下划线问题的解决方法
这篇文章主要介绍了使用geotools导入shp文件到Oracle数据库时表名带下划线的问题解决 的相关资料,需要的朋友可以参考下2016-08-08
最新评论