none
Contar registros repetidos RRS feed

  • Pregunta

  • Hola,

    Necesito contar registros y no he podido dar con una solución; estoy trabajando con SQL SERVER 2008R2, dejo el script para mayor detalle y el resultado esperado:

    CREATE TABLE  TableCodigo(
    	Fecha datetime NOT NULL,
    	Chip numeric(4, 0) NOT NULL,
    	Servicio nvarchar(50) NOT NULL,
    	Valor numeric(4, 0) NOT NULL
    )
    INSERT INTO TableCodigo VALUES('20120701',2335,'T301 001',520)
    INSERT INTO TableCodigo VALUES('20120701',2334,'T301 001',800)
    INSERT INTO TableCodigo VALUES('20120701',2334,'T301 001',520)
    INSERT INTO TableCodigo VALUES('20120701',2335,'T301 001',520)
    INSERT INTO TableCodigo VALUES('20120701',2342,'T301 001',420)
    INSERT INTO TableCodigo VALUES('20120701',2335,'T301 001',520)
    INSERT INTO TableCodigo VALUES('20120701',2335,'T301 001',520)
    INSERT INTO TableCodigo VALUES('20120701',2342,'T301 001',520)
    INSERT INTO TableCodigo VALUES('20120701',2335,'T301 001',500)
    INSERT INTO TableCodigo VALUES('20120701',2342,'T301 001',520)
    INSERT INTO TableCodigo VALUES('20120701',2340,'T301 001',520)
    INSERT INTO TableCodigo VALUES('20120701',2338,'T301 001',520)

    para lo anterior necesito obtener :

    -- los registros únicos "Chip", resultado esperado serian 2 chip (2340 y 2338), estube intentando lo siguiente; 

    SELECT COUNT(*)  FROM TableCodigo WHERE Chip in (SELECT Chip FROM TableCodigo GROUP BY Chip HAVING COUNT(*)<2)

    pero no consigo llegar.

    --los registros que se repite solo 2 veces "Chip"

    --los registros que se repiten mas de 2 veces "Chip"


    Bueno, agradecería la disposición para ayudar solucionar la problemática o darme sugerencias.

    Saludos


    Mauricio Hernández

    viernes, 7 de septiembre de 2012 18:57

Respuestas

  • Mauricio,

    Gracías por postear el esquema de la tabla y data de ejemplo.

    En cuanto al problema, no se si entindi bien, quieres selecionar las filas que no se repite la columna [chip]?

    select chip
    from TableCodigo
    group by chip
    having count(*) = 1;

    Si deseas ver la fila en detalle, entonces:

    select *
    from TableCodigo
    where chip in (select C.chip from TableCodigo as C group by C.chip having count(*) = 1);

    Para los que se repiten dos veces, cambia el predicado en la clausula HAIVNG a "count(*) = 2", y para mayores a 2 "count(*) > 2".


    AMB

    Some guidelines for posting questions...

    • Propuesto como respuesta Ronald Riveros [ronpy] viernes, 7 de septiembre de 2012 19:25
    • Marcado como respuesta mauriciohz viernes, 7 de septiembre de 2012 20:20
    viernes, 7 de septiembre de 2012 19:03

Todas las respuestas

  • Mauricio,

    Gracías por postear el esquema de la tabla y data de ejemplo.

    En cuanto al problema, no se si entindi bien, quieres selecionar las filas que no se repite la columna [chip]?

    select chip
    from TableCodigo
    group by chip
    having count(*) = 1;

    Si deseas ver la fila en detalle, entonces:

    select *
    from TableCodigo
    where chip in (select C.chip from TableCodigo as C group by C.chip having count(*) = 1);

    Para los que se repiten dos veces, cambia el predicado en la clausula HAIVNG a "count(*) = 2", y para mayores a 2 "count(*) > 2".


    AMB

    Some guidelines for posting questions...

    • Propuesto como respuesta Ronald Riveros [ronpy] viernes, 7 de septiembre de 2012 19:25
    • Marcado como respuesta mauriciohz viernes, 7 de septiembre de 2012 20:20
    viernes, 7 de septiembre de 2012 19:03
  • Hola Hunchback, 

    gracias por contestar, 

    el código que me proporcionaste funciona bien, es lo que necesitaba.

    saludos


    Mauricio Hernández

    viernes, 7 de septiembre de 2012 20:20