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

如何使用DISTINCT查询并保留原始排序返回去重属性列表?

解决SQL去重并保留原始排序的问题

你的测试代码里用DISTINCT能实现去重,但SQL Server不会保证DISTINCT后的结果保留原始插入顺序,得做额外处理才能按属性第一次出现的顺序返回结果。

以下是两种可行的解决方案:

方案一:GROUP BY + 最小ID排序

通过分组获取每个属性第一次出现的最小ID,再按这个ID排序来锁定原始顺序:

DECLARE @Attributes TABLE (ID INT, Attribute VARCHAR(50))
INSERT INTO @Attributes (ID, Attribute) VALUES (1, 'Zebra'),(2, 'Apple'),(3, 'Ball'),(4, 'Zebra'),(5, 'Ball')

SELECT Attribute
FROM @Attributes
GROUP BY Attribute
ORDER BY MIN(ID)

方案二:窗口函数标记首次出现

用ROW_NUMBER()窗口函数给每个属性的重复项编号,筛选出首次出现的记录后按ID排序:

DECLARE @Attributes TABLE (ID INT, Attribute VARCHAR(50))
INSERT INTO @Attributes (ID, Attribute) VALUES (1, 'Zebra'),(2, 'Apple'),(3, 'Ball'),(4, 'Zebra'),(5, 'Ball')

WITH RankedAttributes AS (
    SELECT 
        ID,
        Attribute,
        ROW_NUMBER() OVER (PARTITION BY Attribute ORDER BY ID) AS rn
    FROM @Attributes
)
SELECT Attribute
FROM RankedAttributes
WHERE rn = 1
ORDER BY ID

两种方法都能得到你期望的结果:

Zebra
Apple
Ball

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:42:17