2016-10-14 10 views
0

テーブル内のNULL値を持つすべての列を数えるには?行内の空の列を数える方法は?

テーブルが多数の列を持ち、メソッドが動的に列を反復処理する必要があります。

(識別子によって選択された)任意の行では、ヌルセルをカウントします。

Select count(number of null value cells) where id=1 from table 

例:

私はI = 1はあなたが必要な、基本的に

+0

可能な重複http://stackoverflow.com/questions/1580450/how-do-i-list-all-the-columns-in -a-table) –

+0

これはいくつかの類似点です[特定の値(Oracle)のすべてのテーブルですべてのフィールドを検索](http://stackoverflow.com/questions/208493/search-all-fields-in-all-tables -for-a-specific-value-oracle) –

+0

各行にヌル数をカウントするか、各列にヌル数を設定しますか? – Kacper

答えて

1

をidの行を持っていないどのように多くのヌル 細胞を知りたい200個の列からなるテーブルを持っています選択した行のすべての列がNULLかどうかをチェックします。

-- set up 

create table t1(
    rid number primary key, 
    c1 varchar2(17), 
    c2 date, 
    c3 timestamp, 
    c4 number 
); 
insert into t1 
    valueS(1, 'string', null, systimestamp, null); 
    commit ; 

-- going to use DECODE function - doesnt require type consistency. 
select 'decode('||column_name||', null, 1, 0)+' as res 
    from user_tab_columns 
where table_name = 'T1' 

結果:

RES 
------------------------------ 
decode(RID, null, 1, 0)+ 
decode(C1, null, 1, 0)+ 
decode(C2, null, 1, 0)+  
decode(C3, null, 1, 0)+ 
decode(C4, null, 1, 0)+ 

を、あなたのテーブル内の200の以上の列を持っているので、あなたはそれを少しを自動化し、user_tab_columnsを照会することにより、クエリを動的に構築することができるように は、手動のアプローチは、面倒なようです最後のクエリ:

select decode(C4, null, 1, 0)+ 
     decode(C3, null, 1, 0)+ 
     decode(C2, null, 1, 0)+ 
     decode(C1, null, 1, 0)+ 
     decode(RID, null, 1, 0) as num_of_nulls 
    from t1 
where rid = 1 

結果:

NUM_OF_NULLS 
-------------- 
      2 
1

これを試してください。任意のIDを渡してNULL値の列数を取得できます。

CREATE TABLE TEST (ID NUMBER, B VARCHAR2(20), C NUMBER, D VARCHAR2(200)); 
INSERT INTO TEST VALUES (1,NULL,NULL,'XX'); 

SELECT COUNT(NULL_COLS) 
FROM (
SELECT 
to_number(extractvalue(xmltype(dbms_xmlgen.getxml('SELECT CASE WHEN '||COLUMN_NAME||' IS NULL THEN 0 ELSE NULL END COL_VAL FROM '||TABLE_NAME||' WHERE ID=&VALUE')),'/ROWSET/ROW/COL_VAL')) NULL_COLS 
FROM USER_TAB_COLUMNS 
WHERE TABLE_NAME='TEST'); 
[私はテーブルのすべての列を一覧表示するにはどうすればよい?](の
関連する問題