oracle变量逻辑判断,oracle语句增加逻辑判断-很实用

Oracle提供了一些逻辑判断函数,这些函数可以在查询中使用。

1,针对空值进行测试-NVL函数

函数原型为:NVL(testValue,SubstituteValue)

常见的用法是 Selectmax(score) From SC Where Name=‘Jerry’

有时max(score)为空,也就是说Jerry并没有考试记录,这时我们用"No Record"标注一下:

Select NVL(max(score),"No Record") From SC;

还有一个NVL2函数跟其相似,函数原型为: NVL(testValue,SubValue1,SubValue2)

NVL2函数实现的是若testValue为NULL,返回SubValue1,否则返回SubValue2。

2,更广泛意义上的测试-Decode函数

Decode函数的原型为: Decode(testValue,if1,then1,if2,then2.....else).

针对testValue进行测试,若testValue等于if1则返回then1,若testValue等于if2则返回then2,....若都没有返回,刚返回else.

常见用法是在Oracle中实现行转列(Convert Rows to Columns).

CLASSCOURSESTUDENT

----- ------ ------

11 Engish D

11 Engish F

11 Engish E

11 Math F

11 Math D

22 Engish C

22 Engish B

22 History A

22 History B

22 Math B

22 Math C

我想针对知道11和22班选修English,Math,History各有多少名同学。

SELECTcourse,SUM(DECODE(class1)AS"Class-11""Class-22" FROMstudentinfo GROUPBYcourse

在这里我们先对class进行测试,若为11,我们返回1,若不是11我们返回0,再对结果进行sum,即可以知道,11班有共有多少同学。再按Course分组,便可以得出:

COURSE Class-11 Class-22

------- -------- -----

Engish 32

Math 23 History 02

这个解决方案有一个限制就是:你必须预先知道有几个class,但若这些class是不固定的,那这个解决方案就不适用了。

针对此限制,sql部分不太容易解决,可以在程序中workaround.

比如现在加了一个班级号为33的记录:

33 Match A

在程序中动态构建sql时在From语言之前加入,,SUM (DECODE (CLASS,33,1,0)) AS "Class-33")

3,更可读的逻辑测试-Case语句

上面的Decode函数参数数目不定,看上去容易让人迷糊,Oracle提供了另一种语句来实现类似功能,但可读性更高。

如果我们要针对上表的同学栏位进行重命名:

A: Anco

B: Bily

C: Candy

D: Davi

E: Eve

F: Fion

若我们用Decode可以这样实现:

SELECTclass(student'A''Anco''B''Bily''C''Candy''D''Davi''E''Eve''F''Fion' ASen_name FROMstudentinfo

同样的也可以用Case语句实现:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值