Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #10  
Antiguo 21-05-2012
Avatar de LuNaTk
LuNaTk LuNaTk is offline
Miembro
 
Registrado: jun 2007
Posts: 19
Poder: 0
LuNaTk Va por buen camino
Un ultimo ajuste ya que en el caso de que no haya registros que coincidan con la busqueda no se borraba la tabla de resultados, arrojando registros que no cumplian.

Código SQL [-]
alter procedure sp_c_pago_reemplazo @Total numeric(19,2),@Fecha datetime
as
set nocount ON
declare @Pago table (n int identity(1,1),pag_id int,pag_total numeric(19,2))
declare @Resultado table (n int,pag_id int,pag_total numeric(19,2))
insert @pago
select 
pag_id,pag_total
from pago
where pag_total<=@Total
and year(pag_fecha)=year(@Fecha)
and month(pag_fecha)=month(@Fecha)
order by pag_total desc,pag_id desc
declare
@pag_id int,
@pag_total_idx numeric(19,2),
@pag_total numeric(19,2),
@pag_total_rep numeric(19,2),
@n int,
@l int,
@n_ int,
@l_ int,
@c int,
@r int,
@Suma numeric(19,2)
select @n=MIN(n),@l=MAX(n),@Suma=0 from @Pago
while (@n<=@l)
 begin
   -- Limpio tabla de resultados
   delete from @Resultado
   set @Suma=0
   -- Tomo el primer pago
   select @pag_total_idx=pag_total,@pag_id=pag_id from @pago where n=@n
   if @pag_total_idx<=@Total
     insert @Resultado select @n,@pag_id,@pag_total_idx
   -- Verifico si se encontro el total
   if @Total=@pag_total_idx
     Goto Final
   else
     begin
        select 
        @c=MAX(n),
        @r=0
        from @Pago 
        where pag_total<=@Total-@pag_total_idx
        --print 'Repeticiones '+cast(@c as varchar)
        while @r<=@c
          begin  -- Repito la busqueda para todas las combinaciones
            delete from @Resultado where n<>@n
            set @Suma=0
      select 
      @n_=MIN(n)+@r,
      @l_=@l
      from @Pago 
      where pag_total<=@Total-@pag_total_idx and n>@n         
      while @n_<=@l_
        begin
        select @pag_total=pag_total,@pag_id=pag_id from @pago where n=@n_
              --print 'Nivel '+cast(@pag_total as varchar)      
        if (@pag_total_idx+@Suma+@pag_total)<=(@Total)
          begin
          insert @Resultado select @n_,@pag_id,@pag_total 
          set @Suma=@Suma+@pag_total
          end
        if (@Suma+@pag_total_idx)=@Total  -- Verifico si se encontro el total
          Goto Final 
        set @n_=(select MIN(n) from @Pago where n>@n and n>@n_) 
        end
      set @r=@r+1
      end
     end
   set @n=(select MIN(n) from @pago where n>@n and pag_total<@pag_total_idx)
 end
 delete from @Resultado
 Final:
 select pag_id,pag_total from @Resultado order by n

Última edición por LuNaTk fecha: 21-05-2012 a las 03:09:19.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Seleccionar un numero determinado de registros de una tabla NPIdea Firebird e Interbase 8 26-11-2008 19:50:46
Metodo Ideal para Modificar un valor a todos los Registros mostrados en un DBGrid Alexis De la Cr MySQL 7 09-04-2008 14:00:00
Duda registros valor 0 sql drykea SQL 6 13-03-2008 17:43:52
Eliminar de un Select registros con valor de un campo igual danilo_candales SQL 3 15-01-2008 15:32:55
Registros de un campo blob que contienen un string determinado juanpe Firebird e Interbase 2 07-03-2007 18:44:26


La franja horaria es GMT +2. Ahora son las 20:57:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi