异同点
  • 都可以对表行转列;
  • DECODE功能上和简单Case函数比较类似,不能像Case搜索函数一样,进行更复杂的判断
  • 在Case函数中,可以使用BETWEEN, LIKE, IS NULL, IN, EXISTS等等(也可以使用NOT IN和NOT EXISTS,但是这个时候要注意NULL的情况。)
DECODE方法 (Oracle公司独家)

decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

--该函数的含义如下:
IF    条件=值1 THEN RETURN(翻译值1)
ELSIF 条件=值2 THEN RETURN(翻译值2)  ......
ELSIF 条件=值n THEN RETURN(翻译值n)
ELSE  RETURN(缺省值)
END IF
--行转列
SELECT name, SUM(DECODE(Subject, '数学', Score, 0)) 数学, SUM(DECODE(Subject, '语文', Score, 0)) 语文, SUM(DECODE(Subject, '英语', Score, 0)) 英语 FROM Scores GROUP BY name 
CASE WHEN
SELECT name,
SUM( CASE WHEN Subject='数学' THEN Score ELSE 0 END) 数学, SUM( CASE WHEN Subject='语文' THEN Score ELSE 0 END) 语文, SUM( CASE WHEN Subject='英语' THEN Score ELSE 0 END) 英语 FROM Scores group by name;

Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略,Else部分的默认值是NULL

Case具有两种格式,简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式

在Case函数中,可以使用BETWEEN, LIKE, IS NULL, IN, EXISTS等等(也可以使用NOT IN和NOT EXISTS,但是这个时候要注意NULL的情况。)

--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END--Case搜索函数
CASE
WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END --根据条件有选择的UPDATE。 UPDATE Scores SET grade = CASE WHEN score >= 85 THEN '优秀' WHEN score >= 70 AND score < 85 THEN '良好' WHEN score >= 60 AND score < 70 THEN '及格' ELSE '不及格' END; --在Case函数中使用聚合函数:COUNT, SUM, AVG, MAX, MIN SELECT name, CASE WHEN COUNT(*) = 1 THEN MAX(subject) ELSE MAX(CASE WHEN major = 'Y' THEN subject ELSE NULL END) END AS major_subject FROM Scores GROUP BY name; 
Scores表结构和实现如下


转载于:https://www.cnblogs.com/niudaxianren/p/10018715.html

表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点相关推荐

  1. js 矩阵转置_js对象数组矩阵转置(行转列)的实践

    最近项目中有个需求需要将一个类似二维数组的数据矩阵转置(行转列)我通过查资料发现这是很简单的.只需要经过下面的处理就没问题了.但... var newArray = tansDatas[0].map( ...

  2. EXCEL数据透视表怎么把行转为列

    今天有个需求,要将数据透视表的二级行转换为列进行展示.具体如图: 数据透视表为这样: 最终效果为: 操作如下: 第一,将数据透视表改成表格格式,复制到新的表格里 2. CRTL+G 定位空值,输入&q ...

  3. 行转列 oracle nvl,oracle 行转列 decode

    ----创建测试表 create table student_score( name varchar2(20), subject varchar2(20), score number(4,1) ); ...

  4. oracle 行转列 拼接,oracle 行转列 拼接

    做一张数据分析报表的时候,碰到一个问题,立刻想建一张临时表,然后再次存储,这样做的好处是查询时简便,坏处是需要写一个存储来定时执行,仔细想了想,第二个解决方案,行转列,合并出结果. 需求大概: 通过多 ...

  5. python复制excel的sheet表不改变表格式及行高列宽(调用win32com库)

    python使用win32com库复制excel的sheet到sheet末尾,并对表进行重命名,不改变原有格式及行高列宽. import win32com.client as win32 import ...

  6. oracle行转列逗号分隔,Oracle逗号分隔列转行实现方法

    那么,现在如果给出一个权限编号,要去检索出用后这个权限的用户集合,就会需要在逗号分隔的多个权限编号中去匹配给出的这个权限编号.如果使用like去做,一则效率不高,二则匹配不精确.因此用到了逗号分隔列转 ...

  7. C语言实现九九乘法表共9行9列,重点考察for循环的掌握情况!

    有很多小伙伴私信我说需要九九乘法表的代码,所以我就整理出了 下面给出了输出完整乘法表.右上.右下.左上.左下乘法表的代码. [代码一]输出正方形: 运行结果: [代码二]输出右上三角形和左上三角形: ...

  8. 【Mysql】日期、行变列(IF、CASE WHEN THEN)语句总结

    获取昨天的日期 日期相减函数 datediff select datediff(curdate(),INTERVAL 1 DAY) ; 删除Person表中重复的Email数据,只保留id最小的一条 ...

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

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

最新文章

  1. Thinkpad W520 完美安装Ubuntu14.04LTS
  2. 永远不要在 Mysql 中使用 “utf8”
  3. java的list类
  4. Spring Cloud Netflix Eureka client源码分析
  5. BEA WebLogic平台下J2EE调优攻略--转载
  6. 如何理解 JAVA 中的 volatile 关键字
  7. 【POJ - 3304 】Segments(计算几何,思想转化,直线和线段相交)
  8. OffsetIndex和TimeIndex分析
  9. tm图像融合编程matlab,遥感习题
  10. vue router hash和history的区别_react-router-v4
  11. 解决数据库左右连接,查询不出为空的解决方案
  12. 抗衰落技术 — Rake接收和发射分集
  13. 统计学从数据到结论(第四版) pdf
  14. 50k热敏电阻温度对照表c语言,50K热敏电阻温度表
  15. L2-029 特立独行的幸福 (递归) 有代码详细解析
  16. html5 在线视频编辑器,一种基于html5的多轨道视频编辑的方法及系统与流程
  17. 从破解运动世界校园学习模拟器检测与Xposed检测
  18. 自动驾驶中基于地图的视觉定位方法
  19. 【Linux】Linux目录
  20. Java 基础巩固:内部类的字节码学习和实战使用场景

热门文章

  1. CSS3 Media Query:移动 Web 的完美开端
  2. 【Transformer】SMCA: Fast Convergence of DETR with Spatially Modulated Co-Attention
  3. 图像梯度增强_使用梯度增强机在R中进行分类
  4. 数据结构栈和队列_使您的列表更上一层楼:链接列表和队列数据结构
  5. 10年前用10万元投资腾讯,现在能实现财务自由吗?
  6. 联想王传东回应“宁愿放弃5G也不选华为”言论:纯属谣言
  7. 我国是世界最大石油进口国,但是大家知道从哪些国家进口吗?
  8. 信联获批个人征信牌照,对普通人有什么重大影响?
  9. 北京有个可以躺的酒吧——床吧(BED)
  10. LVDS收发传输实例