[Oracle整理]CASE-END

说明:本内容是工作用到的知识点整理,来自工作中和网络。
代码于Oracle9上测试。

 

作用:

1可用来进行数据资料行转列的功能

2可用来对数据进行判断,类似decode,但CASE语句在处理范围条件的时候会显得非常灵活。如果只是需要匹配少量数值时,用Decode更为简洁

3CASE开头,以END结尾分支中WHEN 后跟条件,THEN为显示结果 ELSE 为除此之外的默认情况,类似于高级语言程序中switch casedefault,可以不加

语法:

Case when  expression1 then result1

     when  expression2 then  result2

     ……

     Else  result

END

例子

产品每天的销售额

clip_image002

制作销售额报表,通常习惯将日期作为表格的标题。

clip_image004

如何实现?

SELECT product_name,
       category_name,
       SUM((CASE
         WHEN to_char(SALE_date, 'yyyy/mm/dd') = '2011/10/01' THEN  sales
         ELSE 0
       END)) "10/01",
       SUM((CASE
         WHEN to_char(SALE_date, 'yyyy/mm/dd') = '2011/10/02' THEN  sales
         ELSE 0
       END)) "10/02",
       SUM((CASE
         WHEN to_char(SALE_date, 'yyyy/mm/dd') = '2011/10/03' THEN  sales
         ELSE 0
       END)) "10/03"
  FROM xx_test1
  GROUP BY product_name,category_name

DECODE

作用:

1 进行数据资料行转列

语法:

DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )

A Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。

B 当每个value值被测试,如果value的值为if1Decode 函数的结果是then1;如果value等于if2Decode函数结果是then2;等等。

C 事实上,可以给出多个if/then 配对。

D 注意,这里的ifthenelse 都可以是函数计算表达式(加,减,乘,除)。

例子:

1)使用字段

SELECT decode(category_name,'01','Apple','Pear') FROM xx_test1

2)使用计算表达式——加,减,乘,除

SELECT decode(1+1,2,'Apple','Pear') FROM xx_test1;

SELECT decode(1-1,2,'Apple','Pear') FROM xx_test1;

SELECT decode(1*1,2,'Apple','Pear') FROM xx_test1;

SELECT decode(1/1,2,'Apple','Pear') FROM xx_test1;

3)使用函数

SELECT decode(to_char(sysdate,'mon'),'nov','冬月','dec','腊月',to_char(sysdate,'mon')) FROM dual

比较:

相同:

进行数据资料行转列

不同:

1)CaseEnd可以使用所有的表达式;Decode只是可用算术表达式,不可用逻辑表达式(= > < !=)。

2)CaseEnd可以用多个不同的字段来进行判断;Decode只可用一个字段。

3)CaseEndsql/92标准的一部分,哪儿都能用,也就是说移植性更强.

4)DecodeOracle专有的。

5)Decode方便,简洁;CaseEnd灵活。

应用场景

1)        功能比较简单时,Decode。因为方便,简洁。

2)        要用表达式的都是CaseEnd

3)        Decode满足不了时就用CaseEnd

转载于:https://www.cnblogs.com/htht66/archive/2012/01/29/2330962.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql声明declare_mysql8 参考手册--DECLARE ... CONDITION声明

DECLARE condition_name CONDITION FOR condition_valuecondition_value: {mysql_error_code| SQLSTATE [VALUE] sqlstate_value}该DECLARE ... CONDITION语句声明一个命名错误条件&#xff0c;将名称与需要特定处理的条件相关联。可以在后续DECLARE ... HANDLER语句中引用该名…

libevent源码深度剖析一

libevent源码深度剖析一 ——序幕 张亮 1 前言 Libevent是一个轻量级的开源高性能网络库&#xff0c;使用者众多&#xff0c;研究者更甚&#xff0c;相关文章也不少。写这一系列文章的用意在于&#xff0c;一则分享心得&#xff1b;二则对libevent代码和设计思想做系统的、更…

python什么是空类型_在Python中创建真正的空类型

创建您自己的自定义容器怎么样&#xff1f;在class Empty(object):def __init__(self, **kwargs):object.__setattr__(self, _obj, kwargs)def __getattribute__(self, name):obj object.__getattribute__(self, _obj)try:return obj[name]except KeyError:cls_name object._…

DMA及cache一致性的学习心得

这里提到的DMA设备是非PCI设备在framebuffer的prob函数中&#xff0c;用到了这样一个函数&#xff0c;下面分析下它的作用/* * s3c_fb_map_video_memory(): &#xff0a; 分配DRAM的缓存区给frame buffer。 &#xff0a; 这个缓存区是一个non-cached,non-buffered的。 &…

ASP.NET使用Memcached高缓存实例(初级教程)

http://www.itruanjian.com/a/itruanjian/datebase/nosql/2011/0927/5706.htmlMemcached是一个高性能的分布式内存对象缓存系统&#xff0c;用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数&#xff0c;从而提供动态、数据库驱动网站的M…

C# 线程手册 第三章 使用线程 Monitor.TryEnter()

Monitor 类的TryEnter() 方法在尝试获取一个对象上的显式锁方面和 Enter() 方法类似。然而&#xff0c;它不像Enter()方法那样会阻塞执行。如果线程成功进入关键区域那么TryEnter()方法会返回true. TryEnter()方法的三个重载方法中的两个以一个timeout类型值作为参数&#xff0…

socketpair理解

原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://liulixiaoyao.blog.51cto.com/1361095/533469 今天跟人谈到socketpair的问题&#xff0c;晚上回来写了个程序验证下自己的猜测&#xff0…

小数点化分数的过程_分数和小数的互化

《分数和小数的互化》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《分数和小数的互化(3页珍藏版)》请在人人文库网上搜索。1、_五__年级__数学____备课组教案教师备课时间课时课题分数和小数的互化课型新授课前准备&#xff1a;教材剖析(考点、易错点、关联考点)。1…

pycharm不同py文件共享参数_PyCharm安装笔记

1. 介绍1.1 介绍今天福哥带着大家学习如何安装非常好用的Python编辑器&#xff0c;也就是jetbrains全家桶的PyCharm编辑器。PyCharm是jetbrans开发的一款专门用来编写Python程序的编辑器&#xff0c;它的自动补全、代码联想、框架支持、插件支持以及高效的反应速度成为了编写Py…

WPF - 自定义标记扩展

在使用WPF进行编程的过程中&#xff0c;我们常常需要使用XAML的标记扩展&#xff1a;{Binding}&#xff0c;{x:Null}等等。那么为什么WPF提供了XAML标记扩展这一功能&#xff0c;我们又如何创建自定义的标记扩展呢。这就是本文将要讨论的内容。 一&#xff0e;从标记扩展的分析…

mysql c api 函数 linux下 mysql_query_Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据...

标签&#xff1a;Title:Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据 --2013-10-11 11:57#include #include #include #include "mysql.h"int main(int argc, char *argv[]){MYSQL my_connection;int res;mysql_init(&my_connection);char UNAM…

使用LVM

一些比较常用的命令&#xff1a; vgdisplay 展示创建的volume group lvdisplay 展示创建的logic volume 在我们的项目中&#xff0c;vg把磁盘阵列的所有空间分给它&#xff0c;pv为每个盘&#xff0c;lv分配为每个虚拟机。 这样需要修改的地方&#xff1a;转载于:https://www.c…

mysql客户端保存数据乱码_mysql客户端数据乱码问题

往mysql插入中文数据时出现乱码&#xff0c;如下&#xff1a;mysql> select * from test;-----------------| id | name |-----------------| 1 | 鐜嬪煿鍧?|| 2 | 鐜嬫檽宄?|| 3 | 寮犲皬闆?|| 4 | 鐜嬮洩宄?|| 5 | 闄嗕簯 || 6 | 妗冭姳濂…

基于半同步/半反应堆线程池实现的HTTP解析服务端程序

简介&#xff1a; 半同步/半反应堆线程池是通过一个线程往工作队列添加任务T&#xff0c;然后工作线程竞争工作队列获得任务T。HTTP请求解析服务端程序&#xff1a;逐行解析客户端发送来的HTTP请求然后作出HTTP回答。采用线程池就是&#xff1a;服务端创建一个线程池&#xff0…

GridView中实现CheckBox的全选

用服务器端的方法&#xff1a; 在页面上放一个gridview控件&#xff0c;配置好数据源&#xff0c;编辑列&#xff0c;添加一个模版列&#xff0c;再编辑模版&#xff0c;放入一个checkbox控件。代码如下&#xff1a; <asp:GridView ID"GridView1" runat"serv…

mysql replace first_Java replaceFirst()方法

Java replaceFirst()方法replaceFirst() 方法使用给定的参数 replacement 替换字符串第一个匹配给定的正则表达式的子字符串。语法publicStringreplaceFirst(Stringregex,Stringreplacement)参数 regex -- 匹配此字符串的正则表达式。replacement -- 用来替换第一个匹配项的字符…

Windows与linux双系统安装

[源] [http://xiaomaimai.blog.51cto.com/1182965/294256] Windows与linux双系统 Linux的安装方式有硬盘安装、网络安装、光驱安装。 双系统的安装最后先安装windows&#xff0c;再安装linux&#xff0c;因为windows每次安装时都会重新修改系统引导文件&#xff0c;如果安装…

第一步:Axure 使用svn多人协作产品开发(提交文件)

注册登陆http://www.svnxiezuo.com站点 注册登陆http://www.svnxiezuo.com站点 从注册http://www.svnxiezuo.com站点获取svn项目地址 编辑axure文件 开始创建axure共享文件 创建axure共享文件 axure提交文件到svn版本库当中 登陆http://www.svnxiezuo.com站点svn版本库 axure创…

python文件函数_python文件和文件夹复制函数

本文实例为大家分享了python文件和文件夹复制函数&#xff0c;供大家参考&#xff0c;具体内容如下文件复制函数代码和注释如下&#xff1a;# 文件复制函数def copy_file(file1,file2):将文件一复制到文件二:param file1::param file2::return:# 首先打开源文件file1和目标文件…

\r,\n,\r\n

\r 是回车&#xff0c;return(光标到达最左侧) \n 是换行&#xff0c;newline(移到下一行) 如果只换行&#xff0c;打印的东西会在下一行的先一个位置继续&#xff0c;比如 #### 如果只回车&#xff0c;打印的东西会覆盖原有的东西 test\r123-->123t atest\r…