在SQL Server列中显示具有不匹配值的记录

在SQL Server列中显示具有不匹配值的记录,sql,sql-server,duplicates,Sql,Sql Server,Duplicates,我正在尝试创建一个查询,以查找特定列(ID)中的所有重复值,然后仅显示第二列(Name)不匹配的记录的所有值。名称和ID字段(复合键)在创建的记录中应该是相同的值,但我发现一些记录使用相同的ID使用不同的名称 名称 身份证件 日期 时间 威廉姆斯 55555 2/13/2016 上午11:39 威廉姆斯 55555 3/23/2016 上午9:20 约翰逊 55555 5/13/2016 下午2:56 威廉姆斯 55555 2/13/2016 上午11:39 杰克逊 99999 9/1/20

我正在尝试创建一个查询,以查找特定列(ID)中的所有重复值,然后仅显示第二列(Name)不匹配的记录的所有值。名称ID字段(复合键)在创建的记录中应该是相同的值,但我发现一些记录使用相同的ID使用不同的名称


名称
身份证件
日期
时间
威廉姆斯
55555
2/13/2016
上午11:39
威廉姆斯
55555
3/23/2016
上午9:20
约翰逊
55555
5/13/2016
下午2:56
威廉姆斯
55555
2/13/2016
上午11:39
杰克逊
99999
9/1/2016
上午8:09
史密斯
77777
10/10/2016
凌晨3:03

如果我正确理解了这个问题,您希望使用通常由另一个名称使用的id来查找某个名称的位置

create table [table] 
(
    Name varchar(50),
    ID int,
    [Date] date,
    [Time] time
);

insert into [table] values('Williams', 55555, '13-feb-2016', '11:39:00');
insert into [table] values('Williams', 55555, '23-mar-2016', '09:20:00');
insert into [table] values('Johnson', 55555, '13-feb-2016', '11:39:00');
insert into [table] values('Williams', 55555, '13-feb-2016', '11:39:00');
insert into [table] values('Jackson', 99999, '01-sep-2016', '11:39:00');
insert into [table] values('Smith', 77777, '10-oct-2016', '11:39:00');

with cte as (
    select id, name
    from [table]
    group by id, name 
    having count(*) > 1
)
select *
from [table]
inner join cte on [table].id = cte.id 
and [table].name != cte.name

编辑:添加数据以便我可以验证解决方案

谢谢@James Casey。是,我正在搜索名称与历史名称ID记录集不匹配的记录。我尝试了一个类似于你建议的解决方案,但它给了我同样的结果。相反,它返回匹配的名称和ID记录,而不是不匹配的集合。你能确定你所尝试的与人为的例子有什么不同吗?注:约翰逊详细信息是结果的前4列,后两列是cte,即显示通常使用该id的用户。