2010-11-25 4 views
8

Кто-нибудь знает, как написать сценарий SQL Server, чтобы проверить, содержит ли таблица дублированный номер телефона?Как проверить дублируемую запись в SQL Server

Пример:

У меня есть таблица с именем клиента со следующими данными

name telephone 
alvin 0396521254 
alan 0396521425 
amy 0396521425 

Как я могу написать сценарий в SQL Server, который может вернуть эти записи с повторяющимся номером телефона ??

ответ

20

Чтобы увидеть значения с дубликатами:

SELECT c.telephone 
    FROM CUSTOMER c 
GROUP BY c.telephone 
    HAVING COUNT(*) > 1 

Чтобы увидеть соответствующие записи в таблице для этих дублей:

SELECT c.* 
    FROM CUSTOMER c 
    JOIN (SELECT c.telephone 
      FROM CUSTOMER c 
     GROUP BY c.telephone 
     HAVING COUNT(*) > 1) x ON x.telephone = c.telephone 
0

Я уверен, что кто-то придумает лучшее решение, но я все равно дам свой грубый путь.

Если бы это был я, я бы использовал совокупную функцию COUNT вместе с предложением GROUP BY.

Я хотел бы написать заявление SQL, такие как:

SELECT telephone, COUNT(telephone)[Entries] FROM table1 
GROUP BY telephone 
HAVING Entries > 1 

Это должно возвращать любой дубликат номер телефонов со счетчиком для того, как существуют много дубликатов.

+2

Скажите, что ??? какую базу данных вы используете, что позволяет предложение WHERE после GROUP BY, кроме HAVING? – 2010-11-25 04:56:21

+1

SQL Server позволяет использовать WHERE при использовании GROUP BY. Несмотря на то, что это произойдет до набора результатов, поэтому в этом случае, скорее всего, понадобится ИДЕТ (после создания набора результатов будет применено HAVING). http://technet.microsoft.com/en-us/library/ms177673.aspx – 2010-11-25 05:08:20

1

Вы можете попробовать что-то вроде

;WITH Duplicates AS (
     SELECT Telephone 
     FROM Table 
     HAVING COUNT(1) > 1 
) 
SELECT t.* 
FROm Table t INNER JOIN 
     Duplicates d ON t.Telephone = d.Telephone 

или даже что-то подобные

SELECT * 
FROM Table t 
WHERE EXISTS (
        SELECT 1 
        FROM Table tI  
        WHERE tI.Telephone = t.Telephone 
        AND  tI.Name != t.Name 
       ) 
Смежные вопросы