none
¿Como conseguir ver los elementos que no tuvieron ventas? RRS feed

  • Pregunta

  • Buenos días! Tengo los siguientes controles para mostrar los platos mas y menos vendidos dependiendo multiples características en un rango de tiempo que puede indicar el usuario, ejemplo:

    Para lo cual tengo consultas como esta, que es exactamente la misma para cada control, pero si muy similares (esta consulta es para los artículos menos vendidos de los que se elaboran en cocina):

    		select top(7) Articulo.Nombre, SUM(Detalle.Cantidad) as cantidad from detalle
    		inner join Articulo on Articulo.ID_Articulo = Detalle.ID_Articulo
    		inner join pedido on pedido.ID_Pedido = Detalle.ID_Pedido
    		inner join CategoriaArticulo on CategoriaArticulo.ID_CategoriaArticulo = Articulo.ID_CategoriaArticulo
    		where Pedido.ID_EstadoPedido = 7 AND CategoriaArticulo.ParaCocina = @_ParaCocina AND Pedido.ID_Delivery is null AND Pedido.ID_Reserva is null
    		AND Pedido.Fecha >= @FechaDesde AND Pedido.Fecha <= @FechaHasta
    		group by Articulo.Nombre
    		order by cantidad asc

    Mi problema es: ¿Como puedo mostrarles aquellos artículos que tuvieron 0 ventas y ese periodo de tiempo y que por ende no aparecen ya que tiene que tener como mínimo una venta de un pedido completado en la tabla de detalle? Lo que pensaría es que los artículos para cocina sin ventas que no fueron encontrados en esta consulta, los una a otra consulta que les ponga el nombre y una cantidad de 0. 

    PD: No se si seria irrelevante mostrar ese articulo, estoy abierto a opiniones, pero me intrigaba saber si se podía hacer en caso de que lo necesitara para esto u otra cosa en un futuro.


    tomasgavagnin



    • Editado Orion1998 domingo, 26 de abril de 2020 14:16
    domingo, 26 de abril de 2020 14:14

Todas las respuestas

  • El truco para saber los artículos que no han tenido ventas es hacer un left join en lugar del inner join.

    Select ... from Articulo left join Detalle on Articulo.ID_Articulo = Detalle.ID_Articulo

    Esto devuelve todos los datos de la tabla artículo unidos con la de detalle, y en el caso de que un artículo no tenga ningún detalle, lo que ocurre es que todas las columnas de la tabla detalle traen null. Si haces un SUM(coalesce(Detalle.Cantidad,0)) eso devolverá cero para las que tengan null en la cantidad. O si solo quieres saber los artículos que no tienen ningún detalle, puedes poner ...where Detalle.ID_Articulo is null.

    Desde luego puedes añadir otros join con otras tablas adicionales si lo requieres, pero ojo si tienes alguna condición tal como Pedido.Fecha>fechaDesde, esta condición no se cumplirá para los artículos que no tengan pedido y entonces esos artículos no saldrán.

    domingo, 26 de abril de 2020 14:37