2016-12-07 2 views
-1

У меня есть таблица SQL Server 2012 с ID, First Name и Last name. ID уникален для каждого человека, но из-за ошибки в историческом канале различным людям был присвоен одинаковый идентификатор.Запрос таблицы SQL с разными значениями в одном столбце с тем же ID

------------------------------ 
    ID FirstName LastName 
------------------------------  
    1 ABC   M 
    1 ABC   M 
    1 ABC   M 
    1 ABC   N 
    2 BCD   S 
    3 CDE   T 
    4 DEF   T 
    4 DEG   T 

В этом случае, люди с ID’s 1 различны (их фамилия явно отличается), но они имеют один и тот же ID. Как я могу выполнить запрос и получить результат? Таблица в этом случае имеет миллионы строк. Если бы это был меньший стол, я бы, вероятно, запросил все ID’s с count > 1 и отфильтровал их в формате excel.

Что я пытаюсь сделать, получите список всех таких ID's, которые были назначены двум различным пользователям.

Любые идеи или помощь будут очень благодарны.

Редактировать: Я не думаю, что я сформулировал вопрос очень хорошо.

Существует два идентификатора, которые присутствуют несколько раз. 1 и 4. Строки с id 4 идентичны. Я не хочу этого в своем результате. Строки с идентификатором 1, хотя первое имя такое же, последнее имя отличается для 1 строки. Я хочу, чтобы только те ID, идентификатор которых один и тот же, но одно из первых или последних имен отличается.

Я попытался загрузить идентификаторы, которые имеют несколько вхождений в таблицу temp, и попытался сравнить его с родительской таблицей, хотя и безуспешно. Любые другие идеи, которые я могу попробовать и реализовать?

+0

Что такое результат, который вы хотите получить? – DVT

+0

Прошу прощения. Я был не очень ясен. Просто отредактировал вопрос. –

+0

Перечитав свой вопрос, я еще более смущен. Вы сказали: «Строки с id 4 идентичны». По сравнению с данными, которые вы дали, это неверно ('DEF <> DEG'). – DVT

ответ

3
SELECT 
    ID 
FROM 
    <<Table>> 
GROUP BY 
    ID 
HAVING 
    COUNT(*) > 1; 
+0

Спасибо за ваше время, но я искал что-то другое. Я понял, что мой вопрос не завершен. Итак, я просто обновил его :) –

0
SELECT * 
FROM myTable 
WHERE ID IN (
     SELECT ID 
     FROM myTable 
     GROUP BY ID 
     HAVING MAX(LastName) <> MIN(LastName) OR MAX(FirstName) <> MIN(FirstName) 
    ) 
ORDER BY ID, LASTNAME 
+0

Спасибо за ваше время, но я искал что-то другое. Я понял, что мой вопрос не завершен. Итак, я просто обновил его :) –

Смежные вопросы