2010-11-25 9 views
8

¿Alguien sabe cómo puedo escribir un script de SQL Server para verificar si la tabla contiene un número de teléfono duplicado?¿Cómo puedo verificar el registro duplicado en SQL Server?

Ejemplo:

tengo una tabla llamada del cliente con los datos siguientes

name telephone 
alvin 0396521254 
alan 0396521425 
amy 0396521425 

¿Cómo puedo escribir un script en SQL Server que puede devolver esos registros con número de teléfono duplicado ??

Respuesta

20

Para ver los valores duplicados:

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

Para ver los registros relacionados en la tabla para los duplicados:

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

@astander: Estaría mejor si esta migraña desapareciera. Necesito participar más, si quiero mantener mi liderazgo. –

+0

Tiene un gran buffer enoug como está. Creo que necesita tomarse un tiempo libre de X-) –

+0

@astander: me temo que está dentro de mi memoria intermedia de 30K; debe cesar y desistir para que se pueda restablecer el equilibrio. : p –

0

Estoy seguro de que a alguien se le ocurrirá una solución mejor, pero de todas maneras le daré mi forma cruda.

Si fuera yo, usaría la función COUNT agregada junto con la cláusula GROUP BY.

me gustaría escribir una instrucción SQL tales como:

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

que debe devolver cualquier número de teléfono duplicado con un recuento de cómo existen muchos duplicados.

+2

Digamos que ?? ¿Qué base de datos está utilizando que permita la cláusula WHERE después de GROUP BY, que no sea HAVING? –

+1

SQL Server permite DONDE cuando usa GROUP BY. Aunque ocurriría antes del conjunto de resultados, lo más probable es que tenga que TENER EN ESTE CASO (después de que se genere el conjunto de resultados, se aplicará HAVING). http://technet.microsoft.com/en-us/library/ms177673.aspx –

1

Usted puede intentar algo así como

;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 

o incluso algo como

SELECT * 
FROM Table t 
WHERE EXISTS (
        SELECT 1 
        FROM Table tI  
        WHERE tI.Telephone = t.Telephone 
        AND  tI.Name != t.Name 
       ) 
Cuestiones relacionadas