1,针对空值进行测试-NVL函数
函数原型为:NVL(testValue,SubstituteValue)
有时max(score)为空,也就是说Jerry并没有考试记录,这时我们用"No Record"标注一下:
Select NVL(max(score),"No Record") From SC;
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 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各有多少名同学。
|
在这里我们先对class进行测试,若为11,我们返回1,若不是11我们返回0,再对结果进行sum,即可以知道,11班有共有多少同学。再按Course分组,便可以得出:
COURSE Class-11 Class-22
------- -------- -----
Engish 32
Math 23 History 02
------- -------- -----
Engish 32
Math 23 History 02
33 Match A
在程序中动态构建sql时在From语言之前加入,,SUM (DECODE (CLASS,33,1,0)) AS "Class-33")
3,更可读的逻辑测试-Case语句
如果我们要针对上表的同学栏位进行重命名:
A: Anco
B: Bily
C: Candy
D: Davi
E: Eve
F: Fion
若我们用Decode可以这样实现:
同样的也可以用Case语句实现: