2016-11-09 47 views
3

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

<table> 
 
    <tr> 
 
    <th>Name</th> 
 
    <th>ID</th> 
 
    <th>Date</th> 
 
    <th>Time</th> 
 
    </tr> 
 
    <tr> 
 
    <td>Williams</td> 
 
    <td>55555</td> 
 
    <td>2/13/2016</td> 
 
    <td >11:39am</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Williams</td> 
 
    <td>55555</td> 
 
    <td>3/23/2016</td> 
 
    <td>9:20am</td> 
 
    </tr> 
 
    <tr> 
 
    <td >Johnson</td> 
 
    <td>55555</td> 
 
    <td >5/13/2016</td> 
 
    <td >2:56pm</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Williams</td> 
 
    <td>55555</td> 
 
    <td>2/13/2016</td> 
 
    <td>11:39am</td> 
 
    </tr> 
 
    <tr> 
 
    <td >Jackson</td> 
 
    <td>99999</td> 
 
    <td>9/1/2016</td> 
 
    <td >8:09am</td> 
 
    </tr> 
 
    <tr> 
 
    <td >Smith</td> 
 
    <td >77777</td> 
 
    <td >10/10/2016</td> 
 
    <td >3:03am</td> 
 
    </tr> 
 
</table>

查询应返回第3行(约翰逊记录)的不匹配,其中有重复ID在多个记录中使用 S中的记录。我尝试过不同的方法,但没有得到想要的结果。

回答

1

如果我正确地理解了这个问题,您想使用通常由其他名称使用的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 

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

+0

感谢@詹姆斯 - 凯西。是的,我正在搜索名称与历史名称,ID记录集不匹配的记录。我尝试了一个类似于你的建议的解决方案,但它给了我相同的结果。相反,它会返回匹配的名称和ID记录,而不是不匹配的集合。 – MikeWilkes

+0

我使用您在帖子中提供的数据设置了表格,查询返回Johnson。你能确定你所尝试的与做作的例子有什么不同吗?注意约翰逊细节是结果的前4列,最后两列将是cte,即显示谁通常使用该id。 –

相关问题