SQL Server - Mostrar total en cada línea del conjunto

 
Vista:

Mostrar total en cada línea del conjunto

Publicado por Manu (4 intervenciones) el 10/01/2018 16:32:20
Buen día compañeros tengo una base de datos en SQL server y tengo el siguiente problema.

Para empezar les presento las tablas con al menos los campos involucrados:

> Articulo

codarticulo
descripcion
existencia


> Factura

numeroFactura
fecha


> DetalleFactura

numeroFactura
linea
codarticulo
cantidad

La cuestión es que la existencia en la tabla Articulo no se trabaja con negativos sino que las lineas de las facturas se rebajan del inventario siempre y cuando haya una existencia suficiente, entonces si tengo una factura que en su detalle tiene el producto Leche con cantidad 2 pero en la tabla Articulo la existencia es de 1 dicho rebajo no se realiza, sino que la factura queda como en un estado de stand by hasta que ya haya una existencia suficiente para realizar el descargo de inventario de la misma.

Derivado de lo anterior estoy creando una consulta para poder mostrar cuales son los articulos que presentan existencia insuficiente para rebajar la facura y cuales son las lineas de facturas que requieren esa existencia, entonces tendríamos los siguientes campos en el informe:

Codigo Producto / Descripcion / No. Factura / Fecha / Cantidad / Existencia / Total Requerido

Total Requerido es la suma de la cantidad de todas las lineas de facturas de cada producto, por ejemplo tengo 3 facturas que contienen en su detalle una linea de producto Leche y cantidad 2, ese campo Total Requerido sería entonces 6 y en el query se vería así:


Codigo Producto | Descripcion | No. Factura | Fecha |Cantidad | Existencia | Total Requerido | Diferencia

0001 | Leche | 1000 | 01-01-2018 |2 | 1 | 6 | -5
0001 | Leche | 1001 | 01-01-2018 |2 | 1 | 6 | -5
0001 | Leche | 1002 | 01-01-2018 |2 | 1 | 6 | -5

Hasta el momento tengo todo excepto el Total Requerido, el problema es que en el detalle de una factura pueden haber varias lineas de un mismo producto (esto por motivo de regalías y cosas así) entonces el campo cantidad es un campo sumatorio en caso de que en la factura haya más de una línea del mismo producto.

En el informe solo deben aparecer los productos en los que por no haber existencia suficiente no se pueda rabajar de la mismala cantidad indicada en el detalle de la factura.

El query que tengo vendría a ser así:

SELECT a.codarticulo,b.descripcion,a.numeroFactura,c.fecha,SUM(a.cantidad),b.existencia
FROM ((DetalleFactura a LEFT JOIN Articulo b ON a.codarticulo = b.codarticulo)
JOIN Factura c ON a.numeroFactura = c.numeroFactura)
GROUP BY a.codarticulo,b.descripcion,a.numeroFactura,c.fecha,b.existencia
HAVING b.existencia - SUM(a.cantidad) < 0

No se como mostrar en cada linea ese Total Requerido que suma la cantidad de todas las lineas para cada tipo de producto, agradezco de antemano su ayuda, sugerencias y opiniones.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Mostrar total en cada línea del conjunto

Publicado por Isaias (4558 intervenciones) el 10/01/2018 22:43:17
Duda

En tu query solo entrarian en juego las tablas

> Articulo
> DetalleFactura

De ser asi, entonces, sumas el total de los productos pedidos en las FACTURAS de los ARTICULOS y sacas aquellas que te den NEGATIVOS, ¿cierto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mostrar total en cada línea del conjunto

Publicado por Manu (4 intervenciones) el 10/01/2018 23:36:30
Bueno en realidad Factura solo sirve para obtener el campo fecha, pero en resumen sí, solo Articulo y DetalleFactura entran en juego.

Se me estaba haciendo un enredo y pues resulto muy simple, pero al final quedó así con un subquery:

SELECT a.codarticulo,b.descripcion,a.numeroFactura,c.fecha,SUM(a.cantidad),b.existencia
FROM ((DetalleFactura a LEFT JOIN Articulo b ON a.codarticulo = b.codarticulo)
JOIN Factura c ON a.numeroFactura = c.numeroFactura)
GROUP BY a.codarticulo,b.descripcion,a.numeroFactura,c.fecha,b.existencia,(SELECT SUM(d .cantidad)
FROM DetalleFactura d
WHERE d.codarticulo = a.codarticulo and b.existencia < d.cantidad)
HAVING b.existencia < SUM(a.cantidad)

Gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Mostrar total en cada línea del conjunto

Publicado por Isaias (4558 intervenciones) el 11/01/2018 17:42:11
Exacto !!!, era muy simple
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar