none
Sumar cantidad de registros en 2 tablas

    Question

  • Hola,

    Tengo 2 tablas en mi BD SQL Server 2005 las cuales tienen los mismos campos, cada una de ellas tiene un listado de equipos donde cada campo menciona sus características, estoy realizando el conteo total de equipos de modelo Blade que hay en ambas tablas. He realizado el siguiente conteo usando este código:

    select distinct marca as 'Marca', modelo as 'Modelo', COUNT(modelo) as 'Cantidad'
    from inventario
    where modelo like '%Blade%'
    group by Marca,Modelo
    union
    select distinct marca as 'Marca', modelo as 'Modelo', COUNT(modelo) as 'Cantidad'
    from inventariogc
    where modelo like '%Blade%'
    group by Marca, Modelo

    Y obtengo el siguiente resultado:


    Lo que necesito es que haga la suma total del conteo de cada modelo que se repite, por ejemplo:

    Blade HS20            10

    Blade HS22            25

    BladeCenter H         5

    Agradeceré su respuesta.

    Monday, March 12, 2012 4:36 PM

Answers

  • Por ejemplo:

    ;WITH datos AS
    (
    select distinct marca , modelo 
    from inventario
    where modelo like '%Blade%'
    union
    select distinct marca , modelo 
    from inventariogc
    where modelo like '%Blade%'
    )
    select marca, modelo, COUNT(modelo) as 'Cantidad'
    from datos
    group by Marca,Modelo
    

    Monday, March 12, 2012 4:45 PM
  • Genial,

    Ya encontré la solución:

    WITH datos AS
    (
    select distinct marca as 'Marca', modelo as 'Modelo', COUNT(modelo) as 'Cantidad'
    from inventario
    where modelo like '%Blade%'
    group by Marca,Modelo
    union
    select distinct marca as 'Marca', modelo as 'Modelo', COUNT(modelo) as 'Cantidad'
    from inventariogc
    where modelo like '%Blade%'
    group by Marca,Modelo
    )
    select marca, modelo, sum(Cantidad)
    from datos
    group by Marca,Modelo

    Muchas gracias.

    Monday, March 12, 2012 5:22 PM
  • Trata:

    SELECT Marca, Modelo, SUM(Cantidad) AS Cantidad
    FROM (
    select marca as Marca, modelo as Modelo, COUNT(modelo) as Cantidad
    from inventario
    where modelo like '%Blade%'
    group by Marca,Modelo
    UNION ALL
    select marca as Marca, modelo as Modelo, COUNT(modelo) as Cantidad
    from inventariogc
    where modelo like '%Blade%'
    group by Marca, Modelo
    ) AS T
    GROUP BY Marca, Modelo;
    GO

    1 - No hace falta mezclar DISTINCT con GROUP BY, ya que al agrupar por (Marca, Modelo), no se repetira ese par en el resultado.

    2 - Evita usar apostrofes para delimitar alias, tanto de columnas como de tablas, pues podemos usar los corchetes cuadrados [], o doble comilla si el seteo QUOTED_IDENTIFIER esta prendido. El usa de apostrofes para delimitar identificadores sera deprecado en versiones futuras.


    AMB

    Some guidelines for posting questions...

    Monday, March 12, 2012 5:33 PM

All replies

  • Por ejemplo:

    ;WITH datos AS
    (
    select distinct marca , modelo 
    from inventario
    where modelo like '%Blade%'
    union
    select distinct marca , modelo 
    from inventariogc
    where modelo like '%Blade%'
    )
    select marca, modelo, COUNT(modelo) as 'Cantidad'
    from datos
    group by Marca,Modelo
    

    Monday, March 12, 2012 4:45 PM
  • Genial,

    Ya encontré la solución:

    WITH datos AS
    (
    select distinct marca as 'Marca', modelo as 'Modelo', COUNT(modelo) as 'Cantidad'
    from inventario
    where modelo like '%Blade%'
    group by Marca,Modelo
    union
    select distinct marca as 'Marca', modelo as 'Modelo', COUNT(modelo) as 'Cantidad'
    from inventariogc
    where modelo like '%Blade%'
    group by Marca,Modelo
    )
    select marca, modelo, sum(Cantidad)
    from datos
    group by Marca,Modelo

    Muchas gracias.

    Monday, March 12, 2012 5:22 PM
  • El código que te he propuesto saca los datos tal como pedías. Mira este ejemplo con datos de prueba:

    ; WITH inv1 AS
    (
    	SELECT 'BladeHS22' modelo, 'm1' AS marca
    	UNION ALL
    	SELECT 'BladeHS22' modelo, 'm1' AS marca
    )
    , inv2 AS 
    (
    	SELECT 'BladeHS22' modelo, 'm1' AS marca
    	UNION ALL
    	SELECT 'BladeHS21' modelo, 'm1' AS marca
    )
    ,datos AS
    (
    	SELECT marca , modelo 
    	FROM inv1
    	UNION ALL
    	SELECT marca , modelo 
    	FROM inv2
    )
    SELECT marca, modelo, COUNT(modelo) AS 'Cantidad'
    FROM datos
    GROUP BY Marca,Modelo

    Monday, March 12, 2012 5:25 PM
  • Trata:

    SELECT Marca, Modelo, SUM(Cantidad) AS Cantidad
    FROM (
    select marca as Marca, modelo as Modelo, COUNT(modelo) as Cantidad
    from inventario
    where modelo like '%Blade%'
    group by Marca,Modelo
    UNION ALL
    select marca as Marca, modelo as Modelo, COUNT(modelo) as Cantidad
    from inventariogc
    where modelo like '%Blade%'
    group by Marca, Modelo
    ) AS T
    GROUP BY Marca, Modelo;
    GO

    1 - No hace falta mezclar DISTINCT con GROUP BY, ya que al agrupar por (Marca, Modelo), no se repetira ese par en el resultado.

    2 - Evita usar apostrofes para delimitar alias, tanto de columnas como de tablas, pues podemos usar los corchetes cuadrados [], o doble comilla si el seteo QUOTED_IDENTIFIER esta prendido. El usa de apostrofes para delimitar identificadores sera deprecado en versiones futuras.


    AMB

    Some guidelines for posting questions...

    Monday, March 12, 2012 5:33 PM
  • Hunchback,

    Muchas gracias por esta otra alternativa y por las recomendaciones.

    Saludos.

    Monday, March 12, 2012 5:48 PM