如何筛选同一id对应数据中指定列取值为非null的行
同ID下指定列非空行筛选方案
以下是两种不同业务场景的实现SQL,你可以按需选择:
场景1:仅保留指定列非空的记录
如果不需要保留无任何非空指定列的ID对应数据,直接用WHERE条件过滤即可:
SELECT * FROM 你的表名 WHERE 待判断的指定列名 IS NOT NULL;
场景2:每个ID至少保留1条记录
如果需要覆盖全量ID,某ID下有非空指定列则优先取非空行,全为空则保留任意一行,用窗口函数实现:
WITH 排序后的数据 AS ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY id ORDER BY CASE WHEN 待判断的指定列名 IS NOT NULL THEN 0 ELSE 1 END ) AS 排序编号 FROM 你的表名 ) -- 不需要保留排序编号字段的话,把*替换为实际需要查询的字段列表即可 SELECT * FROM 排序后的数据 WHERE 排序编号 = 1;
提示:如果同一ID下存在多条指定列非空的记录,你可以在窗口函数的ORDER BY子句后追加其他排序规则,控制最终取哪条非空记录。
参考说明
- 你提供的示例表结构如下:

- 上述方案输出结果和你预期的效果一致:

内容的提问来源于stack exchange,提问作者johnwrite
相关产品推荐
相关产品推荐

