2014-10-19 56 views
0

可能是這個問題是另一個問題的重複,我已經在這裏探討了幾個類似的問題,但我沒有找到類似的問題。如果您發現類似問題的鏈接,請提出建議。如何計算基於列值的行null和非空

我的問題是,我有一個表說CLIENTS如下

BRANCH  CLNTID  ACCNT  FACID 
------ ---------- ---------- ---------- 
    201  10001  123400  110021 

    201  10001  123401 

    201  10001  123402  110023 

    201  10001  123403 

    201  10001  123404  110025 

    201  10001  123405 

    201  10001  123406  110027 

    201  10001  123407  110028 

...等許多行。 現在我想編寫一個查詢,以對產出這樣

Branch clntid facid_null facid_not_null 

201  10001  3    5 

我想找到facid = NULL facid colmun計數和facid!= NULL每個分支和每個clntid。

我寫了下面的查詢,但它只讀取了一個計數facid爲null或facid不爲null。

select branch,clntid,count(*) 
from clnt 
where facid is null 
group by branch, clntid; 

請幫助我在單個查詢中使用GROUP BY和OVER(PARTITION BY)子句查找兩個計數。

在此先感謝。 Vivek。

回答

0

聚合函數COUNT計數所有非null事件,因此您可以簡單地使用count(facid)來計算facid_not_null列,並且可以使用類似的技術,並首先將facid_null列的空值和非空值交換。這是一個工作示例:

SQL> create table clnt (branch,clntid,accnt,facid) 
    2 as 
    3 select 201, 10001, 123400, 110021 from dual union all 
    4 select 201, 10001, 123401, null from dual union all 
    5 select 201, 10001, 123402, 110023 from dual union all 
    6 select 201, 10001, 123403, null from dual union all 
    7 select 201, 10001, 123404, 110025 from dual union all 
    8 select 201, 10001, 123405, null from dual union all 
    9 select 201, 10001, 123406, 110027 from dual union all 
10 select 201, 10001, 123407, 110028 from dual 
11/

Table created. 

SQL> select branch 
    2  , clntid 
    3  , count(case when facid is null then 1 end) facid_null 
    4  , count(facid) facid_not_null 
    5 from clnt 
    6 group by branch 
    7  , clntid 
    8/

    BRANCH  CLNTID FACID_NULL FACID_NOT_NULL 
---------- ---------- ---------- -------------- 
     201  10001   3    5 

1 row selected. 
+0

謝謝。好的查詢。 – vivek 2014-10-19 11:11:40

1
select branch 
     ,clntid 
     ,count(*)    as num_rows 
     ,count(facid)   as not_nulls 
     ,count(*) - count(facid) as nulls 
    from clnt 
group 
    by branch 
     ,clntid; 
+0

+1使我記得計數只計算非空值 – 2014-10-19 09:56:44

+0

謝謝。它的工作。 – vivek 2014-10-19 11:04:05