如何识别缺失值

时间:2015-03-02 19:45:58

标签: sql vlookup create-table

我有一个表,每个唯一标识符包含多行值,如下所示:

Row                 UniqueIdentifier                        ColumnA 
1                            UQ1                               Alpha   
2.                           UQ1                               Beta    
3.                           UQ1                               Charlie
4.                           UQ2                               Alpha
5.                           UQ2                               Charlie

目标是创建一个额外的列/表来指示缺失值(在alpha,beta和charlie中),如下所示:

Row UniqueIdentifier    MissValueIndicator
1      UQ1                     None
2.     UQ2                     Beta

在A列下有唯一的标识符包含3个以上的值但是我只想知道Alpha,Beta或Charlie是否缺失(有可能一个UQ错过了这三个中的两个)

谢谢!卡西

2 个答案:

答案 0 :(得分:0)

您可以使用复杂的case语句和聚合来执行此操作:

select UniqueIdentifier,
       coalesce(concat(max(case when ColumnA = 'alpha' then 'alpha;' end),
                       max(case when ColumnA = 'beta' then 'beta;' end),
                       max(case when ColumnA = 'charlie' then 'charlie;' end)
                      ), 'None') as WhatsMissing                  
from atable t
group by UniqueIdentifier;

这使用ANSI标准语法。不同的数据库可以以不同的方式实现concat()功能。

答案 1 :(得分:0)

一种方法是创建所有UniqueIdentifierColumnA组合的矩阵。然后,您可以筛选表中缺少的条目:

select  *
from    (
        select  distinct UniqueIdentifier
        from    YourTable
        ) ids
cross join
        (
        select  'Alpha' as ColumnA
        union all
        select  'Beta'
        union all
        select  'Charlie'
        ) col_a
where   not exists
        (
        select  *
        from    YourTable yt
        where   col_a.ColumnA = yt.ColumnA
                and ids.UniqueIdentifier = yt.UniqueIdentifier
        )