热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oraclecasewhen的使用方法

大家都知道Casewhen的用法,一旦满足了某一个WHEN,则这一条数据就会退出CASEWHEN,而不再考虑其他CASE,文章来详细的介绍了casewhen的用法并举例说明了。Casewhen的用法--简单Case函数简单CASE表...SyntaxHighlighter.all

大家都知道Case when的用法,一旦满足了某一个WHEN ,则这一条数据就会退出CASE WHEN,而不再考虑其他CASE ,文章来详细的介绍了case when的用法并举例说明了。
 
Case when 的用法
--简单Case函数 
简单CASE表达式,使用表达式确定返回值.
  语法:  www.2cto.com  
 代码如下
  CASE search_expression
  WHEN expression1 THEN result1
  WHEN expression2 THEN result2
  ...
  WHEN expressionN THEN resultN
  ELSE default_result
 
搜索CASE表达式,使用条件确定返回值.
  语法:
 
 代码如下
 CASE
  WHEN condition1 THEN result1
  WHEN condistion2 THEN result2
  ...
  WHEN condistionN THEN resultN
  ELSE default_result
  END
  例:
  select product_id,product_type_id,
  case
  when product_type_id=1 then 'Book'
  when product_type_id=2 then 'Video'
  when product_type_id=3 then 'DVD'
  when product_type_id=4 then 'CD'
  else 'Magazine'  www.2cto.com  
  end
  from products
 
这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
 
比如说,下面这段SQL,你永远无法得到“第二类”这个结果
 
 代码如下
 
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'
WHEN col_1 IN ('a')       THEN '第二类'
ELSE'其他' END
 
下面我们来看一下,使用Case函数都能做些什么事情。
 
一,已知数据按照另外一种方式进行分组,分析。
 
有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)
国家(country) 人口(population)
中国 600
美国 100
加拿大 100
英国 200
法国 300
日本 250
德国 200
墨西哥 50
印度 250
 
根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。
洲 人口
亚洲 1100
北美洲 250
其他 700
 
想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。  www.2cto.com  
如果使用Case函数,SQL代码如下
 
 代码如下
SELECT SUM(population),
CASE country
WHEN '中国'     THEN '亚洲'
WHEN '印度'     THEN '亚洲'
WHEN '日本'     THEN '亚洲'
WHEN '美国'     THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END
FROM    Table_A
GROUP BY CASE country
WHEN '中国'     THEN '亚洲'
WHEN '印度'     THEN '亚洲'
WHEN '日本'     THEN '亚洲'
WHEN '美国'     THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END;
 
同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。SQL代码如下
 
 代码如下
SELECT
CASE WHEN salary <= 500 THEN &#39;1&#39;
WHEN salary > 500 AND salary <= 600 THEN &#39;2&#39;
WHEN salary > 600 AND salary <= 800 THEN &#39;3&#39;
WHEN salary > 800 AND salary <= 1000 THEN &#39;4&#39;
ELSE NULL END salary_class,
COUNT(*)
FROM    Table_A
GROUP BY
CASE WHEN salary <= 500 THEN &#39;1&#39;
WHEN salary > 500 AND salary <= 600 THEN &#39;2&#39;
WHEN salary > 600 AND salary <= 800 THEN &#39;3&#39;
WHEN salary > 800 AND salary <= 1000 THEN &#39;4&#39;
ELSE NULL END;  www.2cto.com  
 
二,用一个SQL语句完成不同条件的分组。
 
有如下数据
国家(country) 性别(sex) 人口(population)
中国 1 340
中国 2 260
美国 1 45
美国 2 55
加拿大 1 51
加拿大 2 49
英国 1 40
英国 2 60
 
按照国家和性别进行分组,得出结果如下
国家 男 女
中国 340 260
美国 45 55
加拿大 51 49
英国 40 60
 
普通情况下,用UNION也可以实现用一条语句进行查询。但是那样增加消耗(两个Select部分),而且SQL语句会比较长。
下面是一个是用Case函数来完成这个功能的例子
 
 代码如下
SELECT country,
SUM( CASE WHEN sex = &#39;1&#39; THEN
population ELSE 0 END), --男性人口
SUM( CASE WHEN sex = &#39;2&#39; THEN
population ELSE 0 END)   --女性人口
FROM Table_A
GROUP BY country;
 
这样我们使用Select,完成对二维表的输出形式,充分显示了Case函数的强大。
 
三,在Check中使用Case函数。
 
在Check中使用Case函数在很多情况下都是非常不错的解决方法。可能有很多人根本就不用Check,那么我建议你在看过下面的例子之后也尝试一下在SQL中使用Check。
 
下面我们来举个例子
公司A,这个公司有个规定,女职员的工资必须高于1000块。如果用Check和Case来表现的话,如下所示  www.2cto.com  
 
 代码如下
CONSTRAINT check_salary CHECK
( CASE WHEN sex = &#39;2&#39;
THEN CASE WHEN salary > 1000
THEN 1 ELSE 0 END
ELSE 0 END )
 
如果单纯使用Check,如下所示
 
 代码如下
CONSTRAINT check_salary CHECK
( sex = &#39;2&#39; AND salary > 1000 )
 
女职员的条件倒是符合了,男职员就无法输入了。
实例
 代码如下
create table feng_test(id number, val varchar2(20);
insert into feng_test(id,val)values(1,&#39;abcde&#39;);
insert into feng_test(id,val)values(2,&#39;abc&#39;);
commit;
SQL>select * from feng_test;
id            val
-------------------
1             abcde
2             abc
SQL>select id
     , case when val like &#39;a%&#39; then &#39;1&#39;
          when val like &#39;abcd%&#39; then &#39;2&#39;
     else &#39;999&#39;  www.2cto.com  
    end case
from feng_test;
id             case
---------------------
1                  1
2                  1
根据我自己的经验我倒觉得在使用case when这个很像asp case when以在php swicth case开发关语句的用法,只要有点基础知道我觉得在sql中的case when其实也很好理解。
 
 
 
本文来自于壹聚教程网

推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 如何在Faceu激萌中设置和使用妆容切换特效?
    本文将详细介绍如何在Faceu激萌应用中设置和使用妆容切换特效,帮助用户轻松实现创意拍摄。无论是新手还是有经验的用户,都能从中受益。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文详细介绍了暂估入库的会计分录处理方法,包括账务处理的具体步骤和注意事项。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 极大似然估计(MLE)及其3D可视化解析
    本文详细介绍了极大似然估计(Maximum Likelihood Estimation, MLE)的推导过程,并通过3D可视化展示其在概率密度函数中的应用。我们将探讨如何利用MLE来估计参数,以及它在实际问题中的重要性。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 探讨一个老旧 PHP MySQL 系统中,时间戳字段不定期出现异常值的问题及其可能原因。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 郑州大学在211高校中的地位与排名解析
    本文将详细解读郑州大学作为一所位于河南省的211和双一流B类高校,在全国211高校中的地位与排名,帮助高三学生更好地了解这所知名学府的实力与发展前景。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
author-avatar
尼玛的被注册了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有