只选择一个副本

Joh*_*ley 3 sql-server duplication sql-server-2012

我有一个采购订单和仓库结帐的数据库,似乎仓库结帐往往会插入重复项(我们每晚从旧系统中获取这些数据)。从该表中获取所有行的选择是什么,但一次只选择 1 个重复项?我有大约 10 万个副本,而我的数据库人员仍在圣诞节假期:|

这些表确实有唯一的键,但除了键之外,数据被复制了几千次。我想避免删除数据(以防万一)。服务器正在运行 MSSQL2012,当我回到我的办公桌时,我将使用表结构编辑这篇文章。

Aar*_*and 10

如果您希望返回的行是完整的、完整的行而不是任何其他列的聚合,您可以为此使用 CTE。您可以更改ORDER BY任何列的首选行(分组是您认为应该是唯一的)。

;WITH x AS
(
  SELECT col1, col2, col3, 
    rn = ROW_NUMBER() OVER 
    (
        PARTITION BY unique_columns 
        ORDER BY unique_columns, tie_breaker_if_you_care
    )
  FROM dbo.source_table
)
SELECT col1, col2, col3 FROM x WHERE rn = 1;
Run Code Online (Sandbox Code Playgroud)