Ayuda con un Update

08/07/2006 - 19:26 por jpablos | Informe spam
Saludos

Como podria hacer el siguiente update

Producto U_Pedidas U_Vendidas Fecha_Caducidad
1234 10 0 01/01/2007
1234 5 0 05/05/2007
1234 15 0 06/06/2007

Digamos que se vendieron 16 unidades, deben ubicarse en unidades vendidas
desde la menor fecha de caducidad, con lo que me deberia quedar asi:

Producto U_Pedidas U_Vendidas Fecha_Caducidad
1234 10 10 01/01/2007
1234 5 5 05/05/2007
1234 15 1 06/06/2007

Como podria realizar este update ????

Gracias ..

Preguntas similare

Leer las respuestas

#1 Maxi
08/07/2006 - 21:25 | Informe spam
Hola, por la logica que quieres usar no se me ocurre otra alternativa que
usar cursores, ademas no comprendo con que algoritmo hiciste la
distribucion, porque el primero 10 porque luego 5 y luego 1 ??



Salu2

Microsoft MVP SQL Server
www.sqlgururs.org
Email:


"jpablos" wrote in message
news:
Mostrar la cita
#2 qwalgrande
14/07/2006 - 15:48 | Informe spam
Hola.

Creo que tu problema se resuelve con 2 updates, en lugar de uno solo y sobre
todo, evitando usar un cursor. Asumo que la clave primaria de la tabla de
stock (como la he llamado) es Producto, Fecha. Lo metería en un
procedimiento almacenado y me apoyaría en una función. Yo he usado una
sintaxis cross apply, que para SQL Server 2000 no vale. Sin embargo, puedes
crear una función escalar que devuelva lo mismo, si usas SQL Server 2000. A
lo mejor hay algún error de sintaxis, ya que no lo he hecho al vuelo, y es
posible que no se adapte 100% a lo que necesites, pero espero que al menos
te sirva como guía.

create function fn_Stock_Por_Caducidad (@pFecha smalldatetime, @pProducto
int) returns table return
(
select sum(U_Pedidas - U_Vendidas) as Disponible
from Stock
where Producto = @Producto and Fecha_Caducidad <= @Fecha

)

create proc pVender (@pProducto int, @pCantidadPedido int) as

declare @Fecha smalldatetime, @U_Vendidas int, @U_Disponibles

select @U_Disponibles = isnull(sum(U_Pedidas - U_Vendidas), 0)
from Stock where Producto = @pProducto

if @U_Disponible < @pCantidadPedido
begin
Raiserror('No hay stock suficiente del producto', 1, 1)
Return -998
end



select top 1 @Fecha = Fecha_Caducidad, @U_Vendidas = Disponible
from Stock S cross apply
dbo.fn_Stock_Por_Caducidad (Fecha_Caducidad, Producto)
where Producto = @pProducto and Disponible <= @pCantidadPedido
order by Fecha_Caducidad desc

update Stock set U_Vendidas = U_Pedidas
where Producto = @pProducto and Fecha_Caducidad <= @Fecha

if @U_Vendidas < @pCantidadPedido
begin
select top 1 @Fecha = Fecha_Caducidad
from Stock where U_Vendidas < U_Pedidas and
Producto = pProducto order by Fecha_Caducidad
update Stock set
U_Vendidas = U_Pedidas + (@pCantidadPedido - @U_Vendidas)
where Producto = @pProducto and
end

return 0



Alberto López Grande (qwalgrande)


"jpablos" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida