如果存在,如何为每个ID选择非NA值,否则在Oracle中选择NA?

问题描述 投票:0回答:1

我有一个df,每个ID可以有单行/几行。如果它有多行,则只有一行填充有非NA值的列。有时所有行都是不适用。使用Oracle,我想查询非NA值是否存在,否则直接使用NA值。

df:
ID Category  
1  NA  
1  A  
1  NA  
2  B  
2  NA  
3  NA  
4  C

我希望将以下内容作为最终结果df。

df:
ID  Category  
1  A  
2  B  
3  NA  
4  C

我尝试使用where子句non-NA加入,但是省略了ID 3。

oracle na case-when
1个回答
0
投票

假设列类别中没有任何空值,对于此示例数据,您可以使用条件聚合:

select id, 
  coalesce(max(case when category <> 'NA' then category end), 'NA') category
from tablename
group by id

请参见demo

© www.soinside.com 2019 - 2024. All rights reserved.