如何计算表中具有空值的所有列?
具有大量列的表格和方法应以动态方式迭代列。
在任何给定的行中(由标识符选择),计算空单元格。
Select count(number of null value cells) where id=1 from table
e.g:
我有一个由200列组成的表我想知道有多少null 单元格id = 1的行
答案 0 :(得分:1)
基本上,如果所选行中的每列都为空,则需要检查它们是否为空。
由于表中有200多列,因此手动方法似乎很乏味,因此您可以稍微自动化它并通过查询user_tab_columns
动态构建查询:
-- 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)+
最终查询:
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 :(得分: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');