首页 > 解决方案 > 如果行名称重复,则仅返回具有重复名称的行

问题描述

详细地说,假设我有这张桌子:

NAME  | ID | EMAIL       | TYPE
------+----+-------------+------
Joe   | 1  | NULL        | 01
Joe   | 1  | joe@email   | 02
Henry | 2  | NULL        | 01
Jane  | 3  | jane@email  | 01
Jane  | 3  | jane@email  | 02
Larry | 4  | larry@email | 01
Sue   | 5  | NULL        | 02

我想返回这个:

Joe      |    1        |       joe@email    |   02
Henry    |    2        |         NULL       |   01
Jane     |    3        |      jane@email    |   02
Larry    |    4        |     larry@email    |   01
Sue      |    5        |         NULL       |   02

我已经尝试过Select Distinct,但这会返回原始表。我还没有找到任何其他似乎可以解决我要问的问题,因为这些行不是完全重复的,只是前两列。

Select *
From Table_Name

标签: sqlms-access

解决方案


您似乎希望每个人的记录具有最高TYPE价值。一种直接的方法用于ROW_NUMBER识别您要保留的记录:

SELECT NAME, ID, EMAIL, TYPE
FROM
(
    SELECT NAME, ID, EMAIL, TYPE,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY TYPE DESC) rn
    FROM yourTable
) t
WHERE rn = 1;

在此处输入图像描述

演示


推荐阅读