sql - किसी तालिका से कॉलम का चयन कैसे करें जिसमें गैर शून्य मान हैं?




oracle select (4)

मेरे पास एक सारणी है जिसमें सैकड़ों कॉलम हैं जिनमें से कई शून्य हैं, और मुझे अपना चयन कथन चाहिए, ताकि केवल वे कॉलम वाले मान को वापस कर दिया जाए। यह मुझे डेटा का बेहतर विश्लेषण करने में मदद करेगा। कुछ इस तरह:

Tablename से (गैर शून्य कॉलम) का चयन करें;

मैं उन सभी कॉलम का चयन करना चाहता हूं जिनमें कम से कम एक गैर-शून्य मान हो।

क्या यह किया जा सकता है?


आप जो करना चाहते हैं वह पूरे परिणाम में प्रत्येक पंक्ति पर निर्भरता स्थापित करना है। वास्तव में यह वही नहीं है जो आप चाहते हैं। बस रैमिकेशंस के बारे में सोचें यदि एक पंक्ति में प्रत्येक कॉलम में '0' का मान होता है - अचानक आपके परिणाम सेट की स्कीमा उन सभी "रिक्त" कॉलम को शामिल करने के लिए बढ़ती है। आप तेजी से '*' की बुरी तरह बढ़ रहे हैं, अब आपका परिणाम सेट केवल तालिका के मेटा-डेटा पर निर्भर नहीं है - लेकिन आपका पूरा परिणाम सेट सादा डेटा पर निर्भर है।

आप जो करना चाहते हैं वह सिर्फ उन फ़ील्ड का चयन करें जो आप चाहते हैं, और इस सरल योजना से विचलित नहीं हैं।


नीचे का प्रयोग करें:

SELECT *
FROM information_schema.columns
WHERE table_name = 'Table_Name' and is_nullable = 'NO'

Table_Name को तदनुसार बदला जाना है ...


सांख्यिकी जानकारी के रूप में एक नज़र डालें, यह आपके लिए उपयोगी हो सकता है:

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.

उदाहरण के लिए आप "खाली" कॉलम की पहचान करने के लिए NUM_NULLS = NUM_ROWS जांच सकते हैं या नहीं।
संदर्भ: ALL_TAB_COLUMNS , ALL_TABLES


select column_name
from user_tab_columns
where table_name='Table_name' and num_nulls=0;

गैर नल कॉलम प्राप्त करने के लिए यहां सरल कोड है ..






null