Hay varias ocasiones en las que necesitamos encontrar registros duplicados en SQL Server. Es posible encontrar duplicados usando DISTINTO, NÚMERO DE FILA y el GRUPO POR enfoque.
Los registros duplicados pueden crear problemas a veces al mostrar informes o al realizar una actualización de inserción múltiple. Encontrar registros duplicados en una base de datos necesita más investigación. En algunos casos, los registros duplicados son positivos, pero todo depende también de los datos y del diseño de la base de datos.
Por ejemplo, si un cliente ha pedido el mismo producto dos veces en la misma fecha con la misma dirección de envío y facturación, esto puede resultar en un registro duplicado.
Vamos a crear una tabla Cliente con los campos Nombre, Apellido y Número de móvil.
CREAR TABLA CLIENTE (Nombre VARCHAR (50), Apellido VARCHAR (50), MobileNo VARCHAR (15)); INSERTE EN LOS VALORES DEL CLIENTE ('Niraj', 'Yadav', 989898); INSERTE EN LOS VALORES DEL CLIENTE ('Chetan', 'Gadodia', 959595); INSERTE EN LOS VALORES DEL CLIENTE ('Chetan', 'Gadodia', 959595); INSERTE EN LOS VALORES DEL CLIENTE ('Atul', 'Kokam', 42424242); INSERTE EN LOS VALORES DEL CLIENTE ('Atul', 'Kokam', 42424242); INSERTE EN LOS VALORES DEL CLIENTE ('Vishal', 'Parte', 9394453); INSERTE EN LOS VALORES DEL CLIENTE ('Vishal', 'Parte', 9394453); INSERTE EN LOS VALORES DEL CLIENTE ('Vishal', 'Parte', 9394453); INSERTE EN LOS VALORES DEL CLIENTE ('Jinendra', 'Jain', 121212); INSERTE EN LOS VALORES DEL CLIENTE ('Jinendra', 'Jain', 121212); SELECCIONAR * DEL CLIENTE;
Utilizando la DISTINTO Enfoque, podemos obtener rápidamente filas únicas en una tabla.
SELECCIONAR DISTINTO Nombre, Apellido, MobileNo DEL CLIENTE;
Sin embargo, esto no muestra cuántas veces se ha duplicado una fila. Usando el enfoque GROUP BY, podemos encontrar esto.
Encontrando duplicados usando GROUP BY
La adición de agrupación y un campo de conteo a nuestra pantalla de combinación Nombre, Apellido y MobileNo muestra cuántas veces aparece el nombre de cada cliente.
SELECCIONE Nombre, Apellido, MobileNo, CUENTA (1) como CNT DEL GRUPO DE CLIENTES POR Nombre, Apellido, MóvilNo;
GROUP BY mostrará solo un registro para cada combinación de Nombre, Apellido y MobileNo.
El conteo CNT muestra cuántas veces se ha duplicado la fila.
CNT = 1 indica que la fila aparece solo una vez.
Vamos a filtrar utilizando la Tener cláusula para excluir filas que aparecen una sola vez.
SELECCIONE Nombre, Apellido, MobileNo, COUNT (1) como CNT DESDE GRUPO DE CLIENTES POR Nombre, Apellido, MóvilNo TIENE COUNT (1)> 1;