Me vi en la necesidad de agregar todos los productos en todos los almacenes para poder realizar mis pruebas del sistema de administración. Programé el siguiente método. que tardó 13 segundos la primera vez y 7 la segunda vez (cuando ya existían todas las filas)
Lo que hace es buscar por cada producto (5520) si éste maneja inventario y si es así agrega a cada almacén (23 en total) la cantidad de 500 productos en existencia.
DECLARE @idProducto char(5)='1';
DECLARE @idAlmacen char(2)='1';
DECLARE @inventario bit;
BEGIN TRY
WHILE CAST(@idProducto as int)<5520
BEGIN
WHILE CAST(@idAlmacen as int)<=23
BEGIN
Select @inventario=CAST((Select Inventario from AdmProductos where idProducto=@idProducto) as bit)
if @inventario=1
BEGIN
IF EXISTS (Select * from AdmProductosAlmacenes where idAlmacen=@idAlmacen AND idProducto=@idProducto)
Update AdmProductosAlmacenes set Entradas=0,Salidas=0,Existencia=500 where idAlmacen=@idAlmacen AND idProducto=@idProducto
ELSE
Insert into AdmProductosAlmacenes values (@idProducto,@idAlmacen,0,0,0,0,500);
END
else
print('el producto #'+@idProducto+' no maneja inventario');
select @idAlmacen=(CAST(@idAlmacen as int)+1)
END
set @idAlmacen='1';
select @idProducto=(CAST(@idProducto as int)+1)
print('Producto #'+@idProducto);
END
END TRY
BEGIN CATCH
print(ERROR_MESSAGE());
END CATCH
sábado, 22 de agosto de 2015
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 ;)
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 ;)
Suscribirse a:
Entradas (Atom)