SQL Server - DESGLOCE

 
Vista:

DESGLOCE

Publicado por JESSICA (2 intervenciones) el 04/10/2010 00:09:13
HOLA A TODOS

NECESITO DE SU VALIOSA AYUDA Y ES QUE TENGO UN PEQUEÑO PROBLEMA, NECESITO HACER EL DESGLOCE DE UNA TABLA LLAMADA NOMINA DONDE SE ALMACENAN LOS SUELDOS DE LOS EMPLEADOS Y NECESITO HACER EL DESGLOCE DE BILLETES EN LAS SIGUIENTES DENOMINACIONES:

500 CUANTOS BILLETES DE 500 Y ASI SUCESIVAMENTE
200
100
50
20
10
5
1

MI PROBLEMA ES QUE NO SE COMO HACERLO, AGRADECERIA QUE ME AYUDARAS POR FAVOR
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:DESGLOCE

Publicado por Isaias (4558 intervenciones) el 04/10/2010 06:16:43
De tu gran total, lo colocas en un WHILE, donde vaya dividiendo entre las diferentes denominacions, hasta reducirla a la mas minima (1).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DESGLOCE

Publicado por JESSICA (2 intervenciones) el 04/10/2010 17:46:23
DISCULPA PERO NO PODRIAS AYUDARME PONIENDO UN EJEMPLO POR FAVOR TE LO PIDO ES PARA MI PRUEBA Y ESTOY INICIANDOME EN ESTO DE SQL

GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:DESGLOCE

Publicado por Isaias (4558 intervenciones) el 04/10/2010 23:25:12
Esta seria la idea:

-- borro mi tabla de pruebas
drop table #billetes
-- creo mi tabla de pruebas
create table #billetes (Cons int identity(1,1), Billete int primary key, cantidad int)
-- agrego en mi tabla de pruebas los billetes
insert into #billetes (Billete, cantidad) values(500, 0)
insert into #billetes (Billete, cantidad) values(200, 0)
insert into #billetes (Billete, cantidad) values(100, 0)
insert into #billetes (Billete, cantidad) values(50, 0)
insert into #billetes (Billete, cantidad) values(20, 0)
insert into #billetes (Billete, cantidad) values(10, 0)
insert into #billetes (Billete, cantidad) values(5, 0)
insert into #billetes (Billete, cantidad) values(1, 0)

-- declaro mis variables de uso
declare @importe money
declare @Billete int
declare @id int
-- seteo mis valores
set @id = 1
set @importe = 18564864.00 -- Aqui va la cantidad a desglosar
-- entro a un while
while @importe > 0
begin
select floor((@importe / @Billete)), @importe
select top 1 @Billete = Billete, @id = Cons from #billetes where Cons = @id order by Billete desc
-- en caso de que me de una division en cero y aun haya importe, tomo el siguiente billete
WHILE @importe > 0 and floor((@importe / @Billete)) <= 0
begin
select top 1 @Billete = Billete, @id = Cons from #billetes where Cons = @id order by Billete desc
set @id = @id + 1
continue
end
-- Actualizo mi tabla de pruebas
update #billetes set cantidad = cast(floor((@importe / @Billete)) as int) where Cons = @id
set @id = @id + 1
select @importe = @importe % @Billete
end
-- Verifico el resultado
select * from #billetes order by Billete desc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar