sqloracle-databaseselectnull

How to select columns from a table which have at least one non null value?


I have a table containing hundreds of columns many of which are null, and I would like have my select statement so that only those columns containing a value are returned. It would help me analyze data better. Something like:

Select (non null columns) from tablename;

I want to select all columns which have at least one non-null value.

Can this be done?


Solution

  • Have a look as statistics information, it may be useful for you:

    SQL> exec dbms_stats.gather_table_stats('SCOTT','EMP');
    
    PL/SQL procedure successfully completed.
    
    SQL> select num_rows from all_tables where owner='SCOTT' and table_name='EMP';
    
      NUM_ROWS
    ----------
            14
    
    SQL> select column_name,nullable,num_distinct,num_nulls from all_tab_columns
      2  where owner='SCOTT' and table_name='EMP' order by column_id;
    
    COLUMN_NAME                    N NUM_DISTINCT  NUM_NULLS
    ------------------------------ - ------------ ----------
    EMPNO                          N           14          0
    ENAME                          Y           14          0
    JOB                            Y            5          0
    MGR                            Y            6          1
    HIREDATE                       Y           13          0
    SAL                            Y           12          0
    COMM                           Y            4         10
    DEPTNO                         Y            3          0
    
    8 rows selected.
    

    For example you can check if NUM_NULLS = NUM_ROWS to identify "empty" columns.
    Reference: ALL_TAB_COLUMNS, ALL_TABLES.