Oracle Forums Community of Oracle Professionals including Fusion/Cloud Application Consultants, ERP Experts, Oracle Apps Functional Consultants, Apps DBAs, DBAs, Cloud DBAs, Technical Consultants, Fusion Middleware Experts, SQL, PL/SQL Developers and Project Managers. Welcome to OraERP.com Social Community, a friendly and active community of Oracle Technology Professionals who believe that technology can ‘make the world a better place’. By joining Oracle ERP Community you will have the ability to Post Topics, Receive our Newsletter, subscribe to threads and access many other special features. Registration is Quick and Simple.
Get unlimited access to Oracle Tutorials, Articles, eBooks, Tools and Tips by upgrading to "Premium Membership".
Oracle Training

Thread Rating:
  • 7 Vote(s) - 3.43 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Query to find filled rows only
#1
Dear All,
I have a following situation:

table1

col1           col2
1                 50
2                 70
3                 null
4                 null
null              8
null               9
null               10
5                  11
6                  12
7                  14

I want to write query that count rows which are not null, i have more than 100 colums so dont want to use select count(col1),count(col2) and so on.




Replace EMP with your table name. The result will be a colum containing complete select statement with count function for all columns.


Query:
SELECT 'SELECT ' || LTRIM(MAX(SYS_CONNECT_BY_PATH(COLS, ','))
                          KEEP(DENSE_RANK LAST ORDER BY NEW1),
                          ',') || ' FROM EMP' AS STRING
  FROM (SELECT COLUMN_NAME,
               COLS,
               ROW_NUMBER() OVER(PARTITION BY COLUMN_NAME ORDER BY COLS) AS NEW1,
               ROW_NUMBER() OVER(PARTITION BY COLUMN_NAME ORDER BY COLS) - 1 AS PREV
          FROM (SELECT 1 COLUMN_NAME,
                       'COUNT(DISTINCT ' || COLUMN_NAME || ')' AS COLS
                  FROM user_tab_columns
                 WHERE TABLE_NAME = 'EMP'))
 GROUP BY COLUMN_NAME
CONNECT BY PREV = PRIOR NEW1
       AND COLUMN_NAME = PRIOR COLUMN_NAME
 START WITH NEW1 = 1;

Result:

SELECT COUNT(DISTINCT COMM),COUNT(DISTINCT DEPTNO),COUNT(DISTINCT EMPNO),COUNT(DISTINCT ENAME),COUNT(DISTINCT HIREDATE),COUNT(DISTINCT JOB),COUNT(DISTINCT MGR),COUNT(DISTINCT SAL) FROM EMP
Reply
Thanks given by:


Possibly Related Threads...
Thread Author Replies Views Last Post
  Oracle SQL Developer not able to find Java Virtual Machine Justen Kegan 1 1,058 11-05-2014, 03:14 PM
Last Post: Balin Chakra



Users browsing this thread: 1 Guest(s)
Get Premium Membership Get Oracle Tutorials, Tips! Post a Question!