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

MS SQL Server 2008按前3字段去重并保留指定行的查询方案咨询

MS SQL Server 2008 按指定规则去重解决方案

实现思路

使用窗口函数ROW_NUMBER()按前3个字段f1/f2/f3分组,同分组内优先将f4不为空的行排序在前,最终取每个分组的第一条数据即可,完全符合需求规则。

可行查询代码

SELECT aKey, f1, f2, f3, f4, f5, f6
FROM (
    SELECT *,
        ROW_NUMBER() OVER(
            PARTITION BY f1, f2, f3 
            ORDER BY CASE WHEN f4 <> '' THEN 0 ELSE 1 END ASC
        ) AS row_rank
    FROM #tmp
) AS filtered_tmp
WHERE row_rank = 1

原代码问题说明

你原有写法存在两个缺陷导致排除过多行:

  • INNER JOIN自关联后,只会保留存在重复分组的行,无重复的独立行直接被过滤
  • WHERE t1.f4 <> ''条件会进一步过滤掉独立行中f4为空的记录

效果验证

执行上述代码后,会返回8条符合预期的结果:两个重复分组各保留1条符合要求的行,剩余6条无重复的行全部保留,与预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:27:05