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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言函数pow(c语言pow函数头文件)

    函数介绍pow(x,y)——求x的y次方函数模拟实现普通版:递减n的大小,逐次乘num#include<stdio.h>intmy_pow(intnum,intn){ if(n!=0) returnnum*my_pow(num,n-1); else return1;}intmain(){ printf(“%d\n”,my_pow(2,3)); return0;}优化版:依据n的奇偶性来进行递归处理#incl

    2022年4月11日
    213
  • Linux常用命令:chmod修改文件权限 777和754

    Linux常用命令:chmod修改文件权限 777和754常用下面这条命令:chmod777 文件或目录示例:chmod 777/etc/squid运行命令后,squid文件夹(目录)的权限就被修改为777(可读可写可执行)。如果是Ubuntu系统,可能需要加上sudo来执行:sudochmod 777/etc/squid故事的开始,都会先留一个悬念。只有程序员能懂的冷笑话系列中,有个比较经典的段子:请用最简洁的语言描述我国FL。754。…

    2022年7月27日
    9
  • fscanf()函数具体解释

    fscanf()函数具体解释

    2021年12月15日
    84
  • 死磕带通滤波器

    死磕带通滤波器带通滤波器的作用与陷波器类似,带通滤波器在数字电源控制领域有重要作用。比如在三相LCL逆变器的谐振抑制控制方面,通过带通滤波器可以提取谐振点附近的频谱做进一步的控制策略。在有源电力滤波器利用带通滤波器可以提取电网信号的基波频率从而做进一步的控制。带通滤波器传递函数带通滤波器的传递函数是:h(s)=AwoBss2+Bs+wo2h(s)=\frac{Aw_oBs}{s^2+Bs+w_o^2}h(s)=s2+Bs+wo2​Awo​Bs​其中,wow_owo​是带通的“中心频率”,也就是想要通过频率

    2022年6月7日
    43
  • FusionChartsFree的简单用法[通俗易懂]

    FusionChartsFree的简单用法[通俗易懂]  今天发现个不错的显示图表的东西—-FusionChartsFree,有免费版的,有收费版的,免费版的我用着就不错。收费的可能更好一点儿。  看了看官方提供的例子,我是在JSP中使用,想到一个简单的用法,贴在下面:[code="html"]结果显示 FusionCharts. varchart…

    2022年7月13日
    18
  • 模态类型的传值问题

    模态类型的传值问题

    2022年1月31日
    52

发表回复

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

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