工作中时长会用到竖表转横表(列转行)例如某商场每天都有营业额,数据库中营业额存储的方式是每天很多比每笔对应不同的消费记录
,可能有一天的营业额很多 对应的营业额明细就会很多,如果有个需求是要统计每天营业额多少,按天显示结果该怎么写?
下图的例子是我们数据库中一张记录每月营业情况的表,可以看到201501有很多笔记录,其他月份也有很多。
select amt_fee,inst_datefromR_KC_AGENT_STATISTICS wherei nst_date between 201501 and 201709;
实现方法很简单,此处需要使用oracle的decode函数。如果使用的是mysql则需要使用case when。当让oralce也可以使用case when来实现。

select sum(decode(inst_date, 201501, amt_fee, 0)) amtfees_201501,sum(decode(inst_date, 201502, amt_fee, 0)) amtfees_201502,sum(decode(inst_date, 201503, amt_fee, 0)) amtfees_201503,sum(decode(inst_date, 201504, amt_fee, 0)) amtfees_201504,sum(decode(inst_date, 201505, amt_fee, 0)) amtfees_201505,sum(decode(inst_date, 201506, amt_fee, 0)) amtfees_201506,sum(decode(inst_date, 201507, amt_fee, 0)) amtfees_201507,sum(decode(inst_date, 201508, amt_fee, 0)) amtfees_201508,sum(decode(inst_date, 201509, amt_fee, 0)) amtfees_201509,sum(decode(inst_date, 2015010, amt_fee, 0)) amtfees_201510,sum(decode(inst_date, 2015011, amt_fee, 0)) amtfees_201511,sum(decode(inst_date, 2015012, amt_fee, 0)) amtfees_201512from R_KC_AGENT_STATISTICSwhere inst_date between 201501 and 201512;
查询结果如下:
如果有其他条件也可以在decode中再套一层decode。
再举一个复杂点的例子
转之前,同一个chnl_mcht_id,bank_mcht_id,app_key下 可能会有多个不同的acquire_type
select chnl_mcht_id,BANK_MCHT_ID,decode(max(wechats), 1, 'wechat', '') || '-' ||decode(max(alipays), 1, 'alipay', '') || '-' ||decode(max(qqs), 1, 'qq', '') || '-' ||decode(max(jds), 1, 'jd', '') || '-' ||decode(max(baidus), 1, 'baidus', ''),APP_KEYfrom (select chnl_mcht_id,BANK_MCHT_ID,decode(ACQUIRER_TYPE, 'wechat', 1, 0) wechats,decode(ACQUIRER_TYPE, 'alipay', 1, 0) alipays,decode(ACQUIRER_TYPE, 'qq', 1, 0) qqs,decode(ACQUIRER_TYPE, 'jd', 1, 0) jds,decode(ACQUIRER_TYPE, 'baidu', 1, 0) baidus,APP_KEYfrom (SELECT DISTINCT chnl_mcht_id,BANK_MCHT_ID,ACQUIRER_TYPE,APP_KEYFROM wallet_mcht_info_regWHERE chnl_mcht_id IS NOT NULLgroup by chnl_mcht_id, BANK_MCHT_ID, APP_KEY, ACQUIRER_TYPE)group by chnl_mcht_id, BANK_MCHT_ID, APP_KEY, ACQUIRER_TYPE)group by chnl_mcht_id, BANK_MCHT_ID, APP_KEY

转之后同一个chnl_mcht_id,bank_mcht_id,app_key下面 不同的acquire_type 被压缩进一行

oracle使用decode实现竖表转横表 (列转行)相关推荐

  1. oracle max decode竖表改横表

    1.oracle :max+decode 竖表改横表 展示为 select a.project_id,        max(decode(a.vote_result, '01', a.zaiyi, ...

  2. Oracle实现竖表转横表的几种常用方法(行转列)

    有能耗表,记录各个城市水.电.热的能耗情况,表结构如下: 表结构 名称 类型 备注 E_CODE VARCHAR2(10) 城市的CODE E_VALUE NUMBER 能耗值,包括水耗.电耗.热耗 ...

  3. 关于竖表转横表的问题

    本文作者:dinya 内容摘要:在开发过程,经常遇到一些将表的显示方式进行转换的需求,我们习惯性称之为竖表到横表的转换,本文通过一个例子来简要说明常见的两种竖表转横表的问题. 本文适宜读者范围:ora ...

  4. MySQL中竖表和横表之间的相互转换

    MySQL中竖表和横表之间的相互转换 1.  横表转为竖表 表tb的结构为 表中的数据为 现在要求查询到如下结果 使用的SQL查询语句应该如下: 或者使用下面查询 2.  竖表转为横表 tb2表的结构 ...

  5. 纵表、横表互转的SQL

    纵表.横表互转的SQL By:大志若愚 1.建表: 纵表结构 Table_A  create table Table_A (姓名 varchar(20),课程 varchar(20),成绩 int ) ...

  6. mysql把结果变横表_mysql纵表与横表转换实例

    1.纵表转横表: 纵表结构:Table1 转换后的横表结构: Sql示例代码: 2.横表转纵表: 横表结构: TableA ID      姓名    语文        数学       英语 1  ...

  7. HIVE中纵表转横表

    最近在写hive脚本的时候,遇到一个问题就是,现在存在一个纵表(详细表),如下所示 table T1 id bankname cardname 1 中国银行 金卡 2 中国银行 白金卡 3 建设银行 ...

  8. SQL中纵表、横表互相转换

    1.建表: 纵表结构 Table_A  create table Table_A (姓名 varchar(20),课程 varchar(20),成绩 int ) insert into Table_A ...

  9. mysql 列换行 表设计 设计_mysql 列转行的技巧(分享)

    前言: 由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式.即同一个列中存储了多个属性值(具体结构见下表). 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果 ...

最新文章

  1. [CF816B] Karen and Coffee(前缀和,思维)
  2. 【错误记录】Android Studio 配置 GitHub 报错 ( Can‘t login using given credentials: Request response: 401 Una )
  3. 《流浪地球》是一部违反科学常识的大烂片
  4. 简单mysql优化_mysql常见语句的简单优化策略
  5. 机器学习算法——K近邻法
  6. cmd fsutil 命令 - 创建指定大小文件命令
  7. CentOS7 按nodejs和npm的方法
  8. 为MyEclipse 9/10中的html/JSP编辑器添加代码自动提示
  9. warning:discards qualifiers from pointer target type解决办法
  10. java中Joiner的使用笔记
  11. 算法设计与分析——背包问题(Java)
  12. 华硕x450jn拆机_自己动手丨 轻松搞定华硕X450JN笔记本 内存扩展
  13. 《星际争霸2》分析报告
  14. PTA 浙大python第三章第六题
  15. 配音软件哪个好用?这几个软件值得你试一试
  16. 适定、超定和欠定方程及压缩传感技术
  17. 制作别踩白块网页小游戏
  18. PS怎么更换背景?进来学习一下这些方法
  19. 万能Makefile
  20. Just Shuffle

热门文章

  1. 最全app上传渠道入口 拿去即用
  2. Vue.js框架简介(1)
  3. 谷歌Imagen,人工智能对语言更加深入理解
  4. python爬取千图网图片并保存_Python数据分析与挖掘实战-课程作业5爬取千图网某个频道的高清图片...
  5. mysql数据库重做日志文件_数据库:mysql:重做日志文件(redo log file)
  6. stm32语音识别文字显示_『免费开源』基于STM32的之语音识别
  7. MATLAB2014a的安装
  8. unicode转中文
  9. 《Gartner2016年度新兴技术成熟度曲线》全解读
  10. C# Chart之双Y轴图表实现