repetir - sql eliminar registros duplicados menos uno
consulta que contaría e incrementaría el número de instancias duplicadas de ese registro (1)
Usando Access 2010.
Entonces si tuviera una mesa
COL1
A
B
A
C
A
y al ejecutar la consulta obtendría el resultado en COL2 donde ''A'' se duplica tres veces y su valor COL2 se incrementa a su vez.
COL1 | COL2
A | 1
B | 1
A | 2
C | 1
A | 3
Agrega un campo a tu mesa. Elija Autonumérico como su tipo de datos y conviértalo en la clave principal de la tabla. Llamé a la identificación de campo, por lo que mi versión de los datos de muestra se ve así ...
ID COL1
1 A
2 B
3 A
4 C
5 A
La instrucción SELECT
continuación devuelve este conjunto de resultados ...
ID COL1 COL2a COL2b
1 A 1 1
2 B 1 1
3 A 2 2
4 C 1 1
5 A 3 3
COL2a y COL2b muestran 2 métodos para lograr el mismo resultado. DCount es específico de acceso y requiere citas alrededor de los valores de texto m.COL1
. El segundo enfoque, COL2b , usa una subconsulta correlacionada, por lo que podría funcionar en una base de datos diferente si así lo desea. Y con ese enfoque, no necesitarás molestarte en cotizar valores de texto.
Cualquiera de los enfoques requiere básicamente que el motor db ejecute una consulta adicional para cada fila del conjunto de resultados. Entonces, con una gran mesa, el rendimiento será una preocupación. La indexación ayudará allí. Agregue un índice en COL1
si aún no hay uno. ID
ya tiene un índice ya que es la clave principal.
Si no puede agregar un campo y la tabla no incluye otro campo adecuado, entonces creo que no tiene suerte. No podrá obtener lo que desea con una consulta de Access.
SELECT
m.ID,
m.COL1,
DCount(
"*",
"MyTable",
"COL1 = ''" & m.COL1 & "'' AND ID <= " & m.ID
) AS COL2a,
(
SELECT Count(*)
FROM MyTable AS m2
WHERE m2.COL1 = m.COL1 AND m2.ID <= m.ID
) AS COL2b
FROM MyTable2 AS m
ORDER BY m.ID;