DECODE函数使用

DECODE函数使用DECODE函数,是ORACLE公司的SQL软件ORACLEPL/SQL所提供的特有函数计算方式,DECODE函数是ORACLEPL/SQL的功能强大的函数之一,了解使用DECODE函数很有必要。1DECODE中的if-then-else逻辑在逻辑编程中,经常用到If–Then–Else进行逻辑判断。在DECODE的语法中,实际上就是这样的逻辑处理过程。它的语法如下:  DECOD…

大家好,又见面了,我是你们的朋友全栈君。

DECODE函数,是ORACLE公司的SQL软件ORACLE PL/SQL所提供的特有函数计算方式,DECODE函数是ORACLE PL/SQL的功能强大的函数之一,了解使用DECODE函数很有必要。

1 DECODE 中的if-then-else逻辑

在逻辑编程中,经常用到If – Then –Else 进行逻辑判断。在DECODE的语法中,实际上就是这样的逻辑处理过程。它的语法如下:
  DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
  Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。事实上,可以给出多个if/then 配对。如果value结果不等于给出的任何配对时,Decode 结果就返回else 。
  需要注意的是,这里的if、then及else 都可以是函数或计算表达式。

2 DECODE实现表的转置,这里主要介绍这个作用。

数据库中的表是由列和行构成的一个二维表。一般列在任何数据库中都是有限的数量,而行的变化较大,如果表很大,行的数量可能大上千万行。同一列的不同行可能有不同的值。
例如表A,结构式

FYEAR  VARCHAR2(50) 年份
FSCORE VARCHAR2(50) 分数
RNUMBER NUMBER  分数对应级别

数据如下:

2010  75 3

2010 95 4

2010 50 5

2010 5 6

2009 5 2

2010 25 1

2008 5 19

2008 25 16

2008 50 14

2008 75 11

2008 95 7

现需要查出每一年的级别数,如下图:
分数    年份  5%  25% 50% 75% 95%
级别 2010
2009
一般sql不好实现,原因数据库表存的是纵表,而页面显示的要求是横表,要求不能更改表结构。
因此使用decode函数
用decode()方法改写sql:
select m.f_year,
                             nvl(max(decode(m.fscore, ‘5’, m.fnumber)),0) f5,
                             nvl(max(decode(m.fscore, ’25’, m.fnumber)),0) f25,
                             nvl(max(decode(m.fscore, ’50’, m.fnumber)),0) f50,
                             nvl(max(decode(m.fscore, ’75’, m.fnumber)),0) f75,
                             nvl(max(decode(m.fscore, ’95’, m.fnumber)),0) f95
                        from A m
                       where 1 = 1
                       group by m.f_year
输出结果:
F_YEAR  F5     F25 F50 F75 F95
2008     19      16 14 11 7
2009      2   0 0 0 0
2010      6 1 5 3 4

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160118.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mybatis的resultType integer(resultmap标签详解)

        在官方文档中对resultType做了如下介绍:从这条语句中返回的期望类型的类的完全限定名或别名。注意如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身。使用resultType或resultMap,但不能同时使用。mybatis中resultType可选类型:1,java的基础类型及其包装类int,double和java.lang.Integer,java…

    2022年4月13日
    75
  • EasyUI Dialog 窗体 布局记要「建议收藏」

    EasyUI Dialog 窗体 布局记要

    2022年3月7日
    44
  • bwapp 06

    bwapp 06文章目录Base64Encoding(Secret)ClearTextHTTP(Credentials)HostHeaderAttack(ResetPoisoning)HTML5WebStorage(Secret)SSL2.0DeprecatedProtocolTextFiles(Accounts)Base64Encoding(Secret)抓包,找到sercret,进行base64编码以上级别,40位16进制数,推测使用了sha1编码注意先解码,再base

    2022年9月23日
    0
  • shell编程100例(附PDF下载)「建议收藏」

    shell编程100例(附PDF下载)「建议收藏」1、编写helloworld脚本#!/bin/bash#编写helloworld脚本echo”HelloWorld!”2、通过位置变量创建Linux系统账户及密码#!/bin/bash#通过位置变量创建Linux系统账户及密码#$1是执行脚本的第一个参数,$2是执行脚本的第二个参数useradd”$1″echo”…

    2022年10月3日
    0
  • startService与bindService的区别「建议收藏」

    startService与bindService的区别「建议收藏」Android执行Service有两种方法,一种是startService,一种是bindService。下面让我们一起来聊一聊这两种执行Service方法的区别。1、生命周期上的区别执行startService时,Service会经历onCreate->onStartCommand。当执行stopService时,直接调用onDestroy方法。调用者如果没有stopService,Servi

    2022年6月1日
    34
  • 奈奎斯特采样定理(Nyquist)「建议收藏」

    奈奎斯特采样定理(Nyquist)「建议收藏」采样定理在1928年由美国电信工程师H.奈奎斯特首先提出来的,因此称为奈奎斯特采样定理。1933年由苏联工程师科捷利尼科夫首次用公式严格地表述这一定理,因此在苏联文献中称为科捷利尼科夫采样定理。1

    2022年8月2日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号