表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点
异同点
- 都可以对表行转列;
- 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表结构和实现如下


表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点的更多相关文章
- sql server数据库行转列及巧用case when、和row_number用法例子
select 身份证号码, MAX(t.单位编号) 单位编号, MAX(t.姓名) 姓名, MAX(case when t.rows=1 then convert(varchar(max),疾病名称) ...
- oracle 行转列~列转行(几种方法)
工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ...
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
- SQL2005语句实现行转列,列转行
在做报表时,经常需要将数据表中的行转列,或者列转行,如果不知道方法,你会觉得通过SQL语句来实现非常难.这里,我将使用pivot和unpivot来实现看似复杂的功能.这个功能在sql2005及以上版本 ...
- Sqlserver中PIVOT行转列透视操作
创建表: IF OBJECT_ID('T040_PRODUCT_SALES') IS NOT NULL DROP TABLE T040_PRODUCT_SALES create table T040_ ...
- mysql实现行转列功能
实现从图一转行成图二的功能: 图一: 图二: 建表语句: CREATE TABLE `t_user_score` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT '主 ...
- MySQL 行转列 -》动态行转列 -》动态行转列带计算
Pivot Table Using MySQL - A Complete Guide | WebDevZoomhttp://webdevzoom.com/pivot-table-using-mysql ...
- hive行转列,列转行
实例一:来源: https://www.cnblogs.com/kimbo/p/6208973.html 行转列 (对某列拆分,一列拆多行) 使用函数:lateral view explode(spl ...
- C# Winform中FpSpread表格控件设置固定的(冻结的)行或列
在项目中我们经常会用到固定表头的操作,FpSpread提供了冻结行或列的属性. 你可以冻结表单中的行或列(使其不可滚动). 你可以冻结任意个表单顶部的行,使其成为前导行,你也可以冻结左侧任意多个列,使 ...
随机推荐
- WPF开发ArcGis系统时的异常信息: ArcGIS product not specified. You must first bind to an ArcGIS version prior to using any ArcGIS components.
“System.Runtime.InteropServices.COMException”类型的未经处理的异常在 Arcgis_Test.exe 中发生 其他信息: ArcGIS product no ...
- 微信小程序笔记<三>入口app.js —— 注册小程序
小程序开发框架在逻辑层使用的语言就是JavaScript,所以想玩小程序JavaScript的基本功一定要扎实.但小程序基于js做了一些修改,以方便开发者更方便的使用微信的一些功能,使得小程序更好的贴 ...
- java类库 collection与collections (转)
http://www.cnblogs.com/dashi/p/3597937.html Java中Collection和Collections的区别 1.java.util.Collection 是一 ...
- django之模板系统 --》内容(filter过滤器、tags标签【for、if、with】、母板以及继承、crf_token、注释、组件、静态文件【load static】、get_static_prefix、自定义标签和tag)
常用: Django模板中只需要记两种特殊符号: {{ }}和 {% %} {{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作. 变量 {{ 变量名 }} 变量名由字母数字和下 ...
- [Unity工具]批量修改Texture
BatchModifyTexture.cs using UnityEngine; using System.Collections; using UnityEditor; using System.I ...
- JAVA 本地序列化。
HashMap map = new HashMap(); map.put("province", "北京"); map.put("coding&quo ...
- uva-10487-枚举
题意:给你一个集合,每俩个数相加得到一个和s,输入s1,问离s1最近的s是多少 二分,注意如果二分出相等,那一定是最近的数,要不然就比较最后mid和mid-1的数 #include <strin ...
- MVC基于角色权限控制--数据库设计
在网站后台设计过程中都会遇上权限控制这一问题 当前较为流行的解决方案是基于角色的权限管理 基本思路如下 分别建立 用户信息表.角色信息表.权限信息表 让用户和角色关联,角色和权限关联,当用户访问时,通 ...
- 字符串流stringReader
String info ="good good study day day up";StringReader stringReader = new StringReader(inf ...
- mongodb学习-练习实例
C:\Users\issuser>mongoMongoDB shell version: 2.4.6connecting to: test> db.user.find(){ "_ ...