Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果行具有重复的名称,则仅返回具有重复名称的行_Sql_Ms Access - Fatal编程技术网

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我对您的示例数据的查询似乎正在生成您期望的输出。我建议你那边还有一些问题,不一定与这个问题有关。