数据库

 首页 > 数据库 > Oracle > oracle中case及其类似用法

oracle中case及其类似用法

分享到:
【字体:
导读:
         摘要:在现实数据时,我们为了更直观的显示表内信息,通常会将同类或某个范围内的值归为一类,使用统一的‘新值’取代‘原值’,那么这时候,我们要用到case语句,下面看看case的几种用法吧。  ... Synta...

oracle中case及其类似用法

在现实数据时,我们为了更直观的显示表内信息,通常会将同类或某个范围内的值归为一类,使用统一的‘新值’取代‘原值’,那么这时候,我们要用到case语句,下面看看case的几种用法吧。
 
  1.简单case语句
 
  简单case语句的用法与C#中switch case的用法很类似,case捕获定制,then后返回‘新值’,通常也可以利用该语法判定指定字段是否有指定值得存在,下面通过例子看看它的用法:
 1 select (case acct_month
 2          when '200706' then
 3           '07年6月'
 4          when '200707' then
 5           '07年7月'
 6          else  www.2cto.com  
 7           '其他年份'
 8        end) 年份,
 9        svcnum,
10        fee1,
11        fee2,
12        fee3
13   from TRAIN_TAB_BILLDETAIL;
 
    
 
 
    在这个例子中,如果acct_month的值为200706,那么现实的时候使用‘07年6月’替换原值,在acct_month值不满足任何case条件时,运行else语句,使用else后的数据值替换原值。但是需要注意,在这样一个简单case语句中,不能使用任何比较运算符,同时,when和then后的数据必须与acct_month具有相同的数据类型或能够进行隐式转换,否则报错。  www.2cto.com  
 
  2.case搜索语句
 
  case搜索语句与if…else语句用法类似,进行有条件搜索,返回满足条件的值,在case…when…then…else语法中,when后为比较条件,返回boolean值true或false,若返回false,则执行吓一跳when语句直到比较结果为true时,返回该句then后的值替换原值,若when条件都不满足,则跳转到else,返回else后的匹配值,同时需要注意,返回值类型必须与比较字段的值类型相同或能够通过隐式类型转换,否则返回错误。
看下面的例子:
 
  从下面三张表中返回指定输出格式的数据:

    
 


 
    输出显示‘地市(areadef)’,‘总额分档(fee1+fee2+fee3)’,‘用户数(subscrbid)’,‘入账总额(fee1+fee2+fee3)’,下面看如下代码:
 
select 地域 地市, 总费用分档, count(*) 出账用户数, sum(总收入) 入账收入
  from (select areadef 地域,
               (case
                 when fee1 + fee2 + fee3 >= 0 and fee1 + fee2 + fee3 < 10 then
                  '大于等于0,小于10'
                 when fee1 + fee2 + fee3 >= 10 and fee1 + fee2 + fee3 < 100 then
                  '大于等于10,小于100'
                 else
                  '大于等于100'
               end) 总费用分档,
               TRAIN_TAB_BILLDETAIL.Subscrbid,
               fee1 + fee2 + fee3 总收入
          from TRAIN_TAB_AREA, TRAIN_TAB_SUBSCRBPRCPLN, TRAIN_TAB_BILLDETAIL
         where TRAIN_TAB_BILLDETAIL.Subscrbid =
               TRAIN_TAB_SUBSCRBPRCPLN.Subscrbid
           and TRAIN_TAB_SUBSCRBPRCPLN.Areaid = TRAIN_TAB_AREA.Areaid)
 group by 地域, 总费用分档  www.2cto.com  
 order by sum(总收入);
 
查询结果为  

    
 
  在这个例子中希望通过表连接统计数据,显示‘总费用分档’则是对总费用额度的判断显示的一个数据域,再通过分组函数进行分组,的出想要看到的结果,通过统计分组显示的结果,较不分组的情况下,更具有‘观大局’的优势。
 
  3.类似用法
    NULLIF(a,b)用法较为简单,当参数a的值等于给定值b时,返回null,都则返回a的值,与NVL()用法较为相似。
    COALESCE(a,b)则在参数a值为空时,返回b值,否则,返回a值。
    这里不提供具体例子了。
 
 
 
作者 Rigwarl.Z
oracle中case及其类似用法
分享到:
Oracle简单查询语句
Oracle简单查询语句 Oracle简单查询语句   1.       选择部门30中的所有员工 select * from emp where deptno = 30; 2.       列出所有办事员的姓名、编号和部门编号 select ename,empno,deptno from emp WHERE job = &#039;CLERK&#039;; 3.       找出佣金高于薪金的员工 select * from emp  where comm > sal...
oracle中to_char、to_number、to_date的...
oracle中to_char、to_number、to_date的用法 关键字: oracle 的to_char、to_number、to_date用法 TO_CHAR 是把日期或数字转换为字符串 TO_DATE 是把字符串转换为数据库中得日期类型转换函数 TO_NUMBER 将字符转化为数字    TO_CHAR 使用TO_CHAR函数处理数字 TO_CHAR(number, &#039;格式&#039;) TO_CHAR(salary,’$99,9...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……