
Cruzar con el primer registro
Publicado por Álvaro (1 intervención) el 28/01/2014 18:28:48
Buenas tardes, tengo el siguiente problema:
tengo dos tablas, una con las compras realizadas por los clientes y otra con las devoluciones. Necesito crear un proceso que informe en la tabla de compras las devoluciones realizadas. Los campos que nos interesan de ambas tablas son:
COMPRAS.Cliente
COMPRAS.Producto
COMPRAS.Cantidad
COMPRAS.Fecha
COMPRAS.Devuelto
COMPRAS.Cliente
DEVOLUCIONES.Producto
DEVOLUCIONES.Cantidad
DEVOLUCIONES.Fecha
El problema lo tengo cuando un cliente realiza dos compras del mismo producto y sólo devuelve una. En este caso, sólo debería marcar una compra como devuelta. El ejemplo sería este (2 compras y 1 devolución)
COMPRAS
Cliente 0001
Producto 0002
Cantidad 1
Fecha 15/12/2013
Devuelto 'N'
Cliente 0001
Producto 0002
Cantidad 1
Fecha 15/12/2013
Devuelto 'N'
DEVUELTO
Cliente 0001
Producto 0002
Cantidad -1
Fecha 19/12/2013
Debería marcar como devuleto='S' el primer registros de compra que encuentre para ese producto (en este caso, como ambos tienen la misma fecha, daría igual cual de los dos, pero sólo debería realizar una devolución). Lo hago mediante el siguiente cursor, pero me actualiza ambos registros.
CURSOR c1 IS
SELECT t1.CLIENTE as cli, t1.PRODUCTO as prod, t1.FECHA as fec, t1.DEVUELTO, t1.CANTIDAD as cant,
t2.CLIENTE as cli2, t2.PRODUCTO as prod2, t2.FECHA as fec2, t2.CANTIDAD as cant2
FROM COMPRAS t1
INNER JOIN DEVOLUCIONES t2
ON t1.CLIENTE = t2.CLIENTE and t1.PRODUCTO=t2.PRODUCTO and t1.CANTIDAD=t2.CANTIDAD AND t1.FECHA<=t2.FECHA
ORDER BY t1.CLIENTE ASC, t1.PRODUCTO ASC, t1.FECHA ASC
FOR UPDATE OF t1.DEVUELTO;
Quería saber cual es la forma de hacer un cruce uno a uno, y no muchos a uno (que es lo que me está haciendo ahora).
Gracias!!!!
tengo dos tablas, una con las compras realizadas por los clientes y otra con las devoluciones. Necesito crear un proceso que informe en la tabla de compras las devoluciones realizadas. Los campos que nos interesan de ambas tablas son:
COMPRAS.Cliente
COMPRAS.Producto
COMPRAS.Cantidad
COMPRAS.Fecha
COMPRAS.Devuelto
COMPRAS.Cliente
DEVOLUCIONES.Producto
DEVOLUCIONES.Cantidad
DEVOLUCIONES.Fecha
El problema lo tengo cuando un cliente realiza dos compras del mismo producto y sólo devuelve una. En este caso, sólo debería marcar una compra como devuelta. El ejemplo sería este (2 compras y 1 devolución)
COMPRAS
Cliente 0001
Producto 0002
Cantidad 1
Fecha 15/12/2013
Devuelto 'N'
Cliente 0001
Producto 0002
Cantidad 1
Fecha 15/12/2013
Devuelto 'N'
DEVUELTO
Cliente 0001
Producto 0002
Cantidad -1
Fecha 19/12/2013
Debería marcar como devuleto='S' el primer registros de compra que encuentre para ese producto (en este caso, como ambos tienen la misma fecha, daría igual cual de los dos, pero sólo debería realizar una devolución). Lo hago mediante el siguiente cursor, pero me actualiza ambos registros.
CURSOR c1 IS
SELECT t1.CLIENTE as cli, t1.PRODUCTO as prod, t1.FECHA as fec, t1.DEVUELTO, t1.CANTIDAD as cant,
t2.CLIENTE as cli2, t2.PRODUCTO as prod2, t2.FECHA as fec2, t2.CANTIDAD as cant2
FROM COMPRAS t1
INNER JOIN DEVOLUCIONES t2
ON t1.CLIENTE = t2.CLIENTE and t1.PRODUCTO=t2.PRODUCTO and t1.CANTIDAD=t2.CANTIDAD AND t1.FECHA<=t2.FECHA
ORDER BY t1.CLIENTE ASC, t1.PRODUCTO ASC, t1.FECHA ASC
FOR UPDATE OF t1.DEVUELTO;
Quería saber cual es la forma de hacer un cruce uno a uno, y no muchos a uno (que es lo que me está haciendo ahora).
Gracias!!!!
Valora esta pregunta


0