¿Me pueden ayudar con las declaraciones SQL para encontrar duplicados en múltiples campos?
Por ejemplo, en pseudocódigo:
select count(field1,field2,field3)
from table
where the combination of field1, field2, field3 occurs multiple times
y de la declaración anterior, si hay múltiples ocurrencias, me gustaría seleccionar todos los registros, excepto el primero .
sql
sql-server
tsql
sql-server-2008
JOE SKEET
fuente
fuente
Respuestas:
Para obtener la lista de campos para los que hay varios registros, puede usar ...
Consulte este enlace para obtener más información sobre cómo eliminar las filas.
http://support.microsoft.com/kb/139444
Editar: como los otros usuarios mencionaron, debe haber un criterio para decidir cómo definir "primeras filas" antes de usar el enfoque en el enlace de arriba. En base a eso, deberá usar un orden por cláusula y una subconsulta si es necesario. Si puede publicar algunos datos de muestra, sería realmente útil.
fuente
Menciona "el primero", por lo que supongo que tiene algún tipo de pedido en sus datos. Supongamos que sus datos están ordenados por algún campo
ID
.Este SQL debería obtener las entradas duplicadas, excepto la primera. Básicamente, selecciona todas las filas para las cuales existe otra fila con (a) los mismos campos y (b) existe una ID más baja. El rendimiento no será excelente, pero podría resolver su problema.
fuente
Esta es una solución divertida con SQL Server 2005 que me gusta. Asumiré que por "para cada registro excepto el primero", quiere decir que hay otra columna "id" que podemos usar para identificar qué fila es "primera".
fuente
Para ver valores duplicados:
fuente
Si está utilizando SQL Server 2005 o posterior (y las etiquetas de su pregunta indican SQL Server 2008), puede usar las funciones de clasificación para devolver los registros duplicados después del primero si el uso de combinaciones es menos deseable o poco práctico por alguna razón. El siguiente ejemplo muestra esto en acción, donde también funciona con valores nulos en las columnas examinadas.
Observe después de ejecutar este ejemplo que se excluye el primer registro de cada "grupo" y que los registros con valores nulos se manejan correctamente.
Si no tiene una columna disponible para ordenar los registros dentro de un grupo, puede usar las columnas de partición por columnas.
fuente
fuente
intente esta consulta para tener un conteo de cada instrucción SELECT:
fuente