none
SubConsulta COUNT utilizando Dato del mismo registro o fila de la Consulta SELECT RRS feed

  • Pregunta

  • Tengo una lista de nombres que se repiten  en varios registros. deseo Obtener la misma lista  y Un campo adicional que me cuente cuantas veces aparece cada nombre en la lista:

    ID NOMBRE
    1 LUIS
    1 LUIS
    2 CARLOS
    3 PEDRO
    3 PEDRO
    3 PEDRO



    SELECT  ID, NOMBRE, (SELECT COUNT(NOMBRE) FROM CLIENTES WHERE NOMBRE=NOMBRE) AS  NO_VECES FROM CLIENTES

    La Idea es que me de el resultado:

    ID NOMBRE NO VECES
    1 LUIS 2
    1 LUIS 2
    2 CARLOS 1
    3 PEDRO 3
    3 PEDRO 3
    3 PEDRO 3

    Como aludo al valor de la misma fila o registro a la hora de contar en la clausula WHERE de la subconsulta?


    Luis C






    miércoles, 5 de diciembre de 2018 3:22

Respuestas

  • Hola Luis Carlos H:

    Puedes hacerlo así:

    declare @tableNombre table (id int, nombre varchar(100))
    insert into @tableNombre (id, nombre) values
    (1,'LUIS'),
    (1,'LUIS'),
    (2,'CARLOS'),
    (3,'PEDRO'),
    (3,'PEDRO'),
    (3,'PEDRO');
    /*Solución1 tabla derivada*/
    SELECT T.ID,
           T.NOMBRE,
           a.VECES
    FROM @tableNombre T
          JOIN
    (
        SELECT COUNT(*) AS VECES,
               ID
        FROM @tableNombre
        GROUP BY ID
    ) AS A ON t.id = a.id;
    /* solucion subconsulta correlativa */
    SELECT T.ID,
           T.NOMBRE,
           (SELECT COUNT(*)
        FROM @tableNombre
    	where id = t.id
        GROUP BY ID) as veces
    FROM @tableNombre T
    
    
    

    Espero te sirva

    • Marcado como respuesta Luis Carlos H miércoles, 5 de diciembre de 2018 19:00
    miércoles, 5 de diciembre de 2018 6:43

Todas las respuestas

  • Hola Luis Carlos H:

    Puedes hacerlo así:

    declare @tableNombre table (id int, nombre varchar(100))
    insert into @tableNombre (id, nombre) values
    (1,'LUIS'),
    (1,'LUIS'),
    (2,'CARLOS'),
    (3,'PEDRO'),
    (3,'PEDRO'),
    (3,'PEDRO');
    /*Solución1 tabla derivada*/
    SELECT T.ID,
           T.NOMBRE,
           a.VECES
    FROM @tableNombre T
          JOIN
    (
        SELECT COUNT(*) AS VECES,
               ID
        FROM @tableNombre
        GROUP BY ID
    ) AS A ON t.id = a.id;
    /* solucion subconsulta correlativa */
    SELECT T.ID,
           T.NOMBRE,
           (SELECT COUNT(*)
        FROM @tableNombre
    	where id = t.id
        GROUP BY ID) as veces
    FROM @tableNombre T
    
    
    

    Espero te sirva

    • Marcado como respuesta Luis Carlos H miércoles, 5 de diciembre de 2018 19:00
    miércoles, 5 de diciembre de 2018 6:43
  • bueno, simplemente pudes hacer alias, pero para calcular esto puedes hacerlo de otras formas

    te propongo 3 soluciones , la última saca exactamente el resultado que esperas 
    declare @tableNombre table (id int, nombre varchar(100))
    insert into @tableNombre (id, nombre) values
    (1,'LUIS'),
    (1,'LUIS'),
    (2,'CARLOS'),
    (3,'PEDRO'),
    (3,'PEDRO'),
    (3,'PEDRO');
    
    select id,nombre,count(*) cuantos
    from @tableNombre
    group by id,nombre
    select *,count(*) over(partition by id order by newid()) cuantosacum
    from @tableNombre
    select *,count(*) over(partition by id order by nombre) cuantosacum
    from @tableNombre
    (gracias javi fernandez por la creación de la tabla)

    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA


    miércoles, 5 de diciembre de 2018 7:37
    Moderador
  • Gracias, me sirvió perfecto!

    Luis C

    miércoles, 5 de diciembre de 2018 19:01