我有一个表,每个唯一标识符包含多行值,如下所示:
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错过了这三个中的两个)
谢谢!卡西
答案 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)
一种方法是创建所有UniqueIdentifier
和ColumnA
组合的矩阵。然后,您可以筛选表中缺少的条目:
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
)