sábado, 8 de agosto de 2015

Como hacerle una consulta a otra consulta? Subqueries SQL Server

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