Oracle - Cruzar con el primer registro

 
Vista:
sin imagen de perfil

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!!!!
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