none
Sumar datos de tabla y luego mostrar máximo en SQL RRS feed

  • Pregunta

  • Buenas tardes, lo que quiero lograr hacer es sumar los datos cantidad de una tabla segun el codigo y luego mostrar, únicamente el de mayor cantidad, pude llegar hasta el punto de sumar las cantidades, el problema es que muestra todos los productos segun código.

    Este es el codigo:

    CREATE PROCEDURE ProductoMasVendido
    AS
    BEGIN
    SELECT Productos.*, SUM(Cantidad) as Cantidad
    FROM Productos, Venta
    WHERE Productos.Codigo = Venta.Codigo
    GROUP BY Productos.Nombre, Productos.Codigo, Productos.FechaVencimiento, Productos.Precio;
    END

    esto devuelve:

    Codigo Nombre FechaVencimiento Precio Cantidad

    1 Arbeja 2016-11-05 00:00:00.000 75 1
    2 Choclo 2016-11-05 00:00:00.000 125 7

    Como ven, esta devolviendo 2 distintos, vale destacar que en el de codigo 2, habian dos cantidades 4 y 3, al sumarlas dio 7, el tema es que quiero que aparezca solo el de 7, ya que fue el de mayor cantidad.

    lunes, 31 de octubre de 2016 0:55

Respuestas

  • SELECT TOP 1 Productos.*, SUM(Cantidad) as Cantidad
    FROM Productos, Venta
    WHERE Productos.Codigo = Venta.Codigo
    GROUP BY Productos.Nombre, Productos.Codigo, Productos.FechaVencimiento, Productos.Precio

    ORDER BY SUM(Cantidad) DESC

    • Marcado como respuesta xTanKx lunes, 31 de octubre de 2016 15:57
    lunes, 31 de octubre de 2016 7:34

Todas las respuestas

  • Ponle un "Select TOP 1" para que solo salga el primero, y al final un "Order By Cantidad DESC" para que ordena de mayor a menor, con lo que ese único primer registro será el que tenga la mayor cantidad.
    lunes, 31 de octubre de 2016 7:27
  • SELECT TOP 1 Productos.*, SUM(Cantidad) as Cantidad
    FROM Productos, Venta
    WHERE Productos.Codigo = Venta.Codigo
    GROUP BY Productos.Nombre, Productos.Codigo, Productos.FechaVencimiento, Productos.Precio

    ORDER BY SUM(Cantidad) DESC

    • Marcado como respuesta xTanKx lunes, 31 de octubre de 2016 15:57
    lunes, 31 de octubre de 2016 7:34
  • Ademas, si deseas ver todos las filas que empatan como mayor entonces adiciona WITH TIES a la sub-clausula TOP.

    SELECT TOP (1) WITH TIES col1,...
    ORDER BY SUM(Venta.Cantidad) DESC;

    Si estas interesado en solo una fila, entonces puedes adicionar otra columna(s) para romper los empates y que la sentencia sea deterministica (retorne mismo resultado si se ejecuta con la misma data).

    SELECT TOP (1) ...
    ORDER BY SUM(Venta.Cantidad) DESC, Productos.Codigo ASC;

    Te aconsejo que uses el nombre de la tabla o alias para referenciar cada columna en la sentencia. De esta forma el query es mas legible y no tendremos que adivinar de que tabla proviene cada columna referenciada. Tambien que uses el esquema de las tablas para referenciarlas.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas



    lunes, 31 de octubre de 2016 12:45
  • Muchisimas gracias! Así era!

    lunes, 31 de octubre de 2016 15:57