Sql 如果行具有重复的名称,则仅返回具有重复名称的行
要详细说明,假设我有这个表:Sql 如果行具有重复的名称,则仅返回具有重复名称的行,sql,ms-access,Sql,Ms Access,要详细说明,假设我有这个表: 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@e
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
我尝试了选择Distinct
,但它返回了原始表。我还没有找到任何其他的方法来解决我的问题,因为行不是完全重复的,只是前两列
Select *
From Table_Name
我认为您可以使用聚合做您想做的事情:
select name, id, max(email) as email, max(type) as type
from tablename
group by name, id;
您似乎希望每个人的记录具有最高的
类型
值。一种简单的方法是使用行号
来确定要保留的记录:
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;
我会使用
分组方式
和加入
select t1.*
from table_name t1
join (
select id, max(type) max_type
from table_name
group by id
) t2 on t1.id = t2.id and
t1.type = t2.max_type
接下来的问题是,我正在使用MS SQL Server Management Studio,我正在使用这个示例,但现在有人告诉我“无效列名”。我知道我连接正确,因为我做了一个基本的Select*From表,然后它识别了列。这是一个常见的错误,并且有一个我刚刚错过的明显的修复方法吗?@Jessicancillotti这似乎是一个与你上面问的完全不同的问题。你应该在其中一个答案上做正确标记,然后再问一个新问题。最有可能的是,你的问题有一个简单的解决方案,但不要在这里问。好吧,没有一个答案是正确的,因为没有人做了所要求的,但我可以问一个关于示例中错误的新问题,以便对其进行扩展,使其正确回答原始问题。@Jessicaancellotti我对您的示例数据的查询似乎正在生成您期望的输出。我建议你那边还有一些问题,不一定与这个问题有关。