SQL Server 查找列中是否全部为空值并检索该列

ogq8wdun  于 2022-11-28  发布在  其他
关注(0)|答案(1)|浏览(191)

我有一个包含许多行和列的SQL表。我需要查找哪一列的值都为空。
假设下面是我的示例表
| A列|B栏|
| - -|- -|
| 一个||
| 2个||
在这种情况下,如何在不创建列B的情况下,将其作为下表中的最终结果?
| 错误|立柱|
| - -|- -|
| 全空|B栏|
我还需要执行其他类型的验证,如具有重复项的列等,因此将进一步追加最终结果
我尝试使用表中的select count(column A), count(column B),得到了以下结果
| A列|B栏|
| - -|- -|
| 2个|第0页|
但是我被如何检索上述格式的结果所困扰。

vcirk6k6

vcirk6k61#

如果您只想查找全部为空的列,则有更好的方法来完成此操作。由于您提到了将检查其他规则(如是否存在重复项),因此可以使用union all。将每个数据质量检查表示为一个规则,每行一个。使用union all创建一个表。最后,将这些检查 Package 在一个外部select语句中,该语句具有一个where子句,用于过滤掉规则返回null而不是错误的行。

create or replace table T1(COL_A int, COL_B int);
insert into T1(COL_A, COL_B) values (1, null), (2, null), (1, null);

select * from
(
select iff(count(COL_A)=0,'All-Null',null) as ERROR, 'COL_A' as COLUMN_NAME from T1
    union all
select iff(count(COL_B)=0,'All-Null',null), 'COL_B' from T1
    union all
select iff(count(COL_A)<>count(distinct COL_A), 'Has-Duplicates', null), 'COL_A' from T1
    union all
select iff(count(COL_B)<>count(distinct COL_B), 'Has-Duplicates', null), 'COL_B' from T1
)
where ERROR is not null
;

| 错误信息|数据行名称|
| - -|- -|
| 全空|列B|
| 有重复项|列_A|
如果这是一个特别宽的表,或者您必须在多个表中重现这些数据质量检查,则可以编写一个存储过程,通过从information_schema阅读数据来动态构造SQL,运行SQL并返回结果表。
如果您需要帮助编写这样的SP,请告诉我。

相关问题