首页 > 解决方案 > 根据具有重复值的 2 列获取唯一行

问题描述

我有一个 3 列 6 行的表:

问题

从突出显示的红色文本可以看出,Ash 和 Joey 具有相同的姓氏和街道地址,即“姓氏”列和“街道”列具有重复值。我只想得到其中一个。

期望的结果是在“Last”和“Street”列上获得没有重复值的行:

结果

仅保留AshJoey 中的一个(我在此示例中只使用了 Ash,但 Joey 也可以 - 只需要 1 个或另一个,而不是两者)。

这甚至可能吗?任何建议表示赞赏,谢谢。

PS“街道”列实际上是在不同的表上,所以图表的图片代表了 2 个已经加入的表。

标签: sqlsql-servertsql

解决方案


由于您不关心副本的哪个记录幸存下来,您可以试一试。它实际上会按字母顺序保留第一个First

DROP TABLE IF EXISTS #t;
CREATE TABLE #t (First VARCHAR(255), Last VARCHAR(255), Street VARCHAR(255));
INSERT #t SELECT 'Ash', 'Williams', '123 Main';
INSERT #t SELECT 'Ben', 'O''Shea', '456 Grand';
INSERT #t SELECT 'Claire', 'Port', '543 Jasper';
INSERT #t SELECT 'Denise', 'Stone', '543 Jasper';
INSERT #t SELECT 'Erica', 'Thomas', '789 Holt';
INSERT #t SELECT 'Joey', 'Williams', '123 Main';

WITH dupes AS (
    SELECT First,
           Last,
           Street,
           ROW_NUMBER() OVER (PARTITION BY Last, Street ORDER BY First) RowNum
    FROM #t
)
SELECT First, Last, Street
FROM dupes
WHERE RowNum = 1;

推荐阅读