0

是否有解决方案如何计算视图中每个属性的 NULL 和 NOT NULL 记录数?

例如,有 50 个视图,每个视图有 20 个属性,我期望的结果看起来像(例如):

table_name -----Column_name---Nulls_count----Not_null_count------count(*)

T1 -----------------C1-------------------20---------------40-----------------------60          
T1------------------C2-------------------11--------------49---------------------60
T1------------------C3-------------------25--------------35---------------------60
T2------------------C1-------------------0--------------100---------------------100
T2------------------C2-------------------40--------------60---------------------100

所有视图都存储在 sys.all_views 中,列在 sys.all_tab_columns 中,并且它们之间通过 table_name 字段链接。但是需要使用动态 SQL 或 PL/SQL,因为每个属性的 count() 空行,然后手动为视图中的相同属性计数()不为空的行是疯狂的 :) 有人遇到过吗?有这样的任务?我会感谢您的所有评论和帮助。

4

2 回答 2

1

由于行数是 count(*),因此您可以通过以下方式获得每列的空行和非空行:

select
  count(*)               total_rows  ,
  count(col1)            col1_nonnull,
  count(*) - count(col1) col1_null   ,
  count(col2)            col2_nonnull,
  count(*) - count(col2) col2_null   ,
  ...
from
  my_view
于 2013-07-27T11:48:43.847 回答
0

这是正确的选择:

 select t.table_name, T.NUM_ROWS, c.column_name, c.num_nulls, T.NUM_ROWS -  c.num_nulls  num_not_nulls, c.data_type, c.last_analyzed
from all_tab_cols c
join sys.all_all_tables t on C.TABLE_NAME = t.table_name
 where c.table_name like 'MV_%' and c.nullable ='Y'
 group by t.table_name, T.NUM_ROWS, c.column_name, c.num_nulls, c.data_type, c.last_analyzed
  order by t.table_name, c.column_name; 
于 2013-07-28T10:41:33.180 回答