You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server如何基于行内NULL值数量去重 保留NULL更少的行

解决方案

你原有语句的问题是ROW_NUMBER的排序规则未关联空值数量,同一Premise_ID下的排序是随机的,无法保证保留空值最少的行。按以下逻辑调整即可:

  1. 先统计每行的空值总数
  2. 同一Premise_ID分组内按空值总数升序排序,空值最少的行标记为序号1
  3. 删除序号大于1的重复行
WITH CTE AS(
   SELECT *,
       -- 下方列名替换为你表中实际需要校验空值的字段名,有多少列就加多少个CASE WHEN
       NullCount = 
           CASE WHEN 列1 IS NULL THEN 1 ELSE 0 END +
           CASE WHEN 列2 IS NULL THEN 1 ELSE 0 END +
           CASE WHEN 列3 IS NULL THEN 1 ELSE 0 END +
           CASE WHEN 其他需要校验的列 IS NULL THEN 1 ELSE 0 END,
       RN = ROW_NUMBER()OVER(PARTITION BY Premise_ID ORDER BY NullCount ASC)
   FROM sde.Premise_Test
)
DELETE FROM CTE WHERE RN > 1

常见问题说明

你之前遇到的IS NULL高亮报错,是因为语法书写不规范导致,SQL Server中判断空值必须使用字段 IS NULL的格式,不能写字段 = NULL,也不要遗漏CASE WHEN的完整结构,即可避免报错。

如果同一Premise_ID下存在多行空值数量完全相同的情况,可以在ORDER BY NullCount ASC后追加额外排序规则(比如按主键ID升序),来明确最终保留的行,避免随机选择。

内容的提问来源于stack exchange,提问作者accedesoft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:00:00