Oracle中统计符合某列条件的列总数

最近在项目报表中需要一个查询语句,用来统计符合某一列条件的其它几列的个数

比如有下面一个表结构:

  

 需要在列D后面增加一列,统计在列A不为空,并且列B、C、D不为空的个数

 经过自己试验,查找帮助,总算实现了上面的查询。

 首先讲几个函数的用法:

 NULL:指的是空值,或者非法值。
 NVL (expr1, expr2)

 参数说明:如果expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致
 NVL2 (expr1, expr2, expr3)

 参数说明:如果expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型
 NULLIF (expr1, expr2)

 参数说明:如果相等返回NULL,不等返回expr1

 下面是本人通过两种方法实现的结果

 方法一:

代码
 1 Select a,
 2        b,
 3        c,
 4        d,
 5        Case
 6          When a Is Not Null Then
 7           Nvl2(b, 1,0+ Nvl2(c, 1,0+ Nvl2(d, 1,0)
 8          Else
 9           0
10        End E
11   From AA

 方法二:

代码
 1 Select a,
 2        b,
 3        c,
 4        d,
 5        Case
 6          When a Is Not Null Then
 7           decode(b,'',0,1+ decode(c,'',0,1+ decode(d,'',0,1)
 8          Else
 9           0
10        End E
11   From AA

 效果图显示:

如果大家有其它好的方法,欢迎提出交流~

原文地址:https://www.cnblogs.com/ZHF/p/1612092.html