2016-11-09 50 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。 –

相關問題