En ocasiones realizamos consultas que quedan casi perfectas, o nuestro poco conocimiento nos permite arreglar el resultado sin enredarnos más. Bueno pues para eso usen las consultas sobre consultas
Observen la siguiente imagen fué creada con el siguiente código:
SELECT DISTINCT venta.idVenta, producto.Producto, venta.Precio,
(SELECT SUM(Cantidad) AS Expr1 FROM Abonos WHERE (idCliente = abono.idCliente) AND (idVenta = abono.idVenta)) AS TotalAbonado,
(SELECT venta.Precio - SUM(Cantidad) AS Expr1
FROM Abonos AS Abonos_1
WHERE (idCliente = abono.idCliente) AND (idVenta = abono.idVenta)) AS Saldo,
CONVERT (varchar(10), venta.FechaVenta, 103) AS Fecha FROM Ventas AS venta
LEFT OUTER JOIN Abonos AS abono ON abono.idCliente = venta.idCliente AND abono.idVenta = venta.idVenta
LEFT OUTER JOIN Productos AS producto ON producto.idProducto = venta.idProducto
WHERE venta.idCliente = 1 AND venta.Pagado = 'False' AND venta.Cancelado = 'False'
No importa si no entienden la consulta.. se les va a presentar el caso.
Pero que es eso de null¡ cuando no se encuentran pagos de un artículo las columnas total abonado y Saldo me aparecen en blanco
Pues para eso le voy a hacer otra consulta a esta tabla y con el uso de la sentencia isnull asignaré valores ami antojo, quedando de la siguiente forma:
Select idVenta,Producto,Precio,isnull(TotalAbonado,0) TotalAbonado,isnull(Saldo,Precio) Saldo,Fecha from (Select tu primera consulta) as #Temp
o así para traer todas las columnas
Select * from (Select tu primera consulta) as #Temp
y si no entendiste algo aquí está la consulta completa
Select * from (SELECT DISTINCT venta.idVenta, producto.Producto, venta.Precio,
(SELECT SUM(Cantidad) AS Expr1 FROM Abonos WHERE (idCliente = abono.idCliente) AND (idVenta = abono.idVenta)) AS TotalAbonado,
(SELECT venta.Precio - SUM(Cantidad) AS Expr1
FROM Abonos AS Abonos_1
WHERE (idCliente = abono.idCliente) AND (idVenta = abono.idVenta)) AS Saldo,
CONVERT (varchar(10), venta.FechaVenta, 103) AS Fecha FROM Ventas AS venta
LEFT OUTER JOIN Abonos AS abono ON abono.idCliente = venta.idCliente AND abono.idVenta = venta.idVenta
LEFT OUTER JOIN Productos AS producto ON producto.idProducto = venta.idProducto
WHERE venta.idCliente = 1 AND venta.Pagado = 'False' AND venta.Cancelado = 'False' ) as #Temp
y el resultado visual,donde la venta 4 no tiene abonos y muetra valores en las columnas que antes eran null
Sé que lo vas a necesitar ;)
No hay comentarios.:
Publicar un comentario