如何计算一行中的空列?

时间:2016-10-14 13:20:33

标签: sql oracle

如何计算表中具有空值的所有列?

具有大量列的表格和方法应以动态方式迭代列。

在任何给定的行中(由标识符选择),计算空单元格。

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

e.g:

  

我有一个由200列组成的表我想知道有多少null   单元格id = 1的行

2 个答案:

答案 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');