繁体   English   中英

计算表中每列的空值或非空值

[英]Count null or non null values for every column in a table

我需要有关为表中所有表的null / null值编码计数器的帮助。 我知道如何在一列中执行此操作,但不知道如何将其与所有列合并。

在例子中

              CITY         STATE       CONTINENT
MICHAEL.E     NULL         NY          NA
JOHN.D        PARIS        FR          EU
NICOLAS.B     FRANKFURT    GE          EU
MING.Y        NULL         NULL        AF

所以我会得到像

column      null       not_null ....
city        2          2
state       1          3
continent   0          4

我确定它必须与可以从中获取的所有列ID的列表一起使用

SELECT DISTINCT AC.object_id, AC.name, AC.column_id 
     FROM SYS.all_columns AC JOIN sys.all_objects AO 
       ON AC.object_id=AO.object_id 
      WHERE AO.name='MY_TABLE_NAME'

而且由于我有很多要处理的表,其中许多都有600多个列,因此我需要该应用程序的解决方案。

我会使用APPLY

select cols as [column], 
       sum(case when col is null then 1 else 0 end) as [null],
       sum(case when col is not null then 1 else 0 end) as [not_null]
from table t cross apply
     ( values ('city', city), 
              ('state', state), 
              ('continent', continent),
              . . .
     ) tt (cols, col)
group by cols;

编辑

select cols, 
       sum(case when col is null then 1 else 0 end) as Null_value, 
       sum(case when col is not null then 1 else 0 end) as not_null_value 
from TABLE_NAME cross apply 
     ( values ('Column_1', Column_1), 
              ('Column_2', Column_2), 
              ('Column_3', Column_3), 
              ('Column_4', Column_4), 
              ('Column_5', Column_5)   
     ) tt (cols,col) 
group by cols;

SQL Server和Oracle

with CTE as
(
  select ColName, ColVal
  from 
  (
    select name, city, state, continent
    from mytable
  ) t1
    unpivot
  (
    ColVal for ColName in (city, state, continent)
  )
)
select ColName,
       sum(case when ColVal is null then 1 else 0 end) as nulls,
       sum(case when ColVal is null then 0 else 1 end) as not_nulls
from CTE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM