2012-03-16 20 views
34

Quiero comprobar si un dato aparece más de una vez en una columna particular de mi tabla mediante SQL. Aquí está mi código SQL de lo que tengo hasta ahora:Ver si un elemento aparece más de una vez en una columna de base de datos

select * from AXDelNotesNoTracking where count(salesid) > 1 

salesid es la columna que desea comprobar, cualquier ayuda se agradece, gracias.

+2

qué variedad de SQL? MySQL? Microsoft SQL Server? ¿Oráculo? ¿Acceso? etc. – UnhandledExcepSean

Respuesta

80

Debería ser:

SELECT SalesID, COUNT(*) 
FROM AXDelNotesNoTracking 
GROUP BY SalesID 
HAVING COUNT(*) > 1 

En cuanto a su consulta inicial:

  1. No se puede hacer un SELECT * ya que esta operación requiere un GROUP BY y columnas tiene que ser en el GROUP BY o en una función agregada (es decir, COUNT, SUM, MIN, MAX, AVG, etc.)
  2. Como se trata de una operación GROUP BY, una cláusula HAVING lo filtrará en lugar de DONDE

Editar:

Y me acaba de ocurrir esto, si desea ver qué elementos están allí más de una vez (pero esto depende de qué base de datos que está utilizando):

;WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY SalesID ORDER BY SalesID) AS [Num] 
    FROM AXDelNotesNoTracking 
) 
SELECT * 
FROM cte 
WHERE cte.Num > 1 

Por supuesto, esto solo muestra las filas que han aparecido con el mismo SalesID pero no muestra el valor de SalesID inicial que ha aparecido más de una vez. Es decir, si aparece un SalesID 3 veces, esta consulta mostrará las instancias 2 y 3, pero no la primera instancia. Aún así, podría ser útil dependiendo de por qué está buscando valores múltiples de SalesID.

Edit2:

La siguiente consulta fue publicada por APC a continuación y es mejor que el CTE menciono anteriormente, ya que muestra todas las filas en las que un SalesID ha aparecido más de una vez. Lo incluyo aquí para completarlo. Simplemente agregué un ORDER BY para mantener agrupados los valores de SalesID. El ORDER BY también podría ayudar en el CTE anterior.

SELECT * 
FROM AXDelNotesNoTracking 
WHERE SalesID IN 
    ( SELECT SalesID 
      FROM AXDelNotesNoTracking 
      GROUP BY SalesID 
      HAVING COUNT(*) > 1 
    ) 
ORDER BY SalesID 
0

probar esto:

select salesid,count (salesid) from AXDelNotesNoTracking group by salesid having count (salesid) >1 
+0

-1 Falta esta cláusula HAVING para identificar solo los registros que aparecen más de una vez, como la pregunta original está solicitando. –

+0

no mencionó que solo quiere ver los más de 1 registros pero para verificarlos –

+1

La pregunta dice: "Quiero verificar si un dato aparece más de una vez en una columna en particular". Sin la cláusula HAVING, obtendrás todos los valores y si la tabla es grande, será difícil encontrar los que aparecen más de una vez. –

4

¿Qué tal:

select salesid from AXDelNotesNoTracking group by salesid having count(*) > 1; 
Cuestiones relacionadas