Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Buscar Resultado entre muchos montos

Estas en el tema de Buscar Resultado entre muchos montos en el foro de SQL Server en Foros del Web. Buenas noches estoy usando un SP para encontrar un resultado entre muchos montos, el problema que el sp solo me devuelve un total si los ...
  #1 (permalink)  
Antiguo 12/06/2015, 16:21
 
Fecha de Ingreso: octubre-2008
Mensajes: 9
Antigüedad: 16 años
Puntos: 0
Buscar Resultado entre muchos montos

Buenas noches estoy usando un SP para encontrar un resultado entre muchos montos, el problema que el sp solo me devuelve un total si los montos estan continuos , si los montos que me dan el resultado que estoy buscando no estan uno por debajo del otro no me funciona alguien me puede ayudar???? dejo el sp que estoy usando
Código SQL:
Ver original
  1. ALTER PROCEDURE sp_c_pago_reemplazo @Total NUMERIC(19,2),@Fecha datetime
  2. AS
  3. SET nocount ON
  4. DECLARE @Pago TABLE (n INT IDENTITY(1,1),pag_id INT,pag_total NUMERIC(19,2))
  5. DECLARE @Resultado TABLE (n INT,pag_id INT,pag_total NUMERIC(19,2))
  6. INSERT @pago
  7. SELECT
  8. pag_id,pag_total
  9. FROM pago
  10. WHERE pag_total<=@Total
  11. AND YEAR(pag_fecha)=YEAR(@Fecha)
  12. AND MONTH(pag_fecha)=MONTH(@Fecha)
  13. ORDER BY pag_total DESC,pag_id DESC
  14. DECLARE
  15. @pag_id INT,
  16. @pag_total_idx NUMERIC(19,2),
  17. @pag_total NUMERIC(19,2),
  18. @pag_total_rep NUMERIC(19,2),
  19. @n INT,
  20. @l INT,
  21. @n_ INT,
  22. @l_ INT,
  23. @c INT,
  24. @r INT,
  25. @Suma NUMERIC(19,2)
  26. SELECT @n=MIN(n),@l=MAX(n),@Suma=0 FROM @Pago
  27. while (@n<=@l)
  28.  BEGIN
  29.    -- Limpio tabla de resultados
  30.    DELETE FROM @Resultado
  31.    SET @Suma=0
  32.    -- Tomo el primer pago
  33.    SELECT @pag_total_idx=pag_total,@pag_id=pag_id FROM @pago WHERE n=@n
  34.    IF @pag_total_idx<=@Total
  35.      INSERT @Resultado SELECT @n,@pag_id,@pag_total_idx
  36.    -- Verifico si se encontro el total
  37.    IF @Total=@pag_total_idx
  38.      GOTO Final
  39.    ELSE
  40.      BEGIN
  41.         SELECT
  42.         @c=MAX(n),
  43.         @r=0
  44.         FROM @Pago
  45.         WHERE pag_total<=@Total-@pag_total_idx
  46.         --print 'Repeticiones '+cast(@c as varchar)
  47.         while @r<=@c
  48.           BEGIN  -- Repito la busqueda para todas las combinaciones
  49.             DELETE FROM @Resultado WHERE n<>@n
  50.             SET @Suma=0
  51.       SELECT
  52.       @n_=MIN(n)+@r,
  53.       @l_=@l
  54.       FROM @Pago
  55.       WHERE pag_total<=@Total-@pag_total_idx AND n>@n        
  56.       while @n_<=@l_
  57.         BEGIN
  58.         SELECT @pag_total=pag_total,@pag_id=pag_id FROM @pago WHERE n=@n_
  59.               --print 'Nivel '+cast(@pag_total as varchar)      
  60.         IF (@pag_total_idx+@Suma+@pag_total)<=(@Total)
  61.           BEGIN
  62.           INSERT @Resultado SELECT @n_,@pag_id,@pag_total
  63.           SET @Suma=@Suma+@pag_total
  64.           END
  65.         IF (@Suma+@pag_total_idx)=@Total  -- Verifico si se encontro el total
  66.           GOTO Final
  67.         SET @n_=(SELECT MIN(n) FROM @Pago WHERE n>@n AND n>@n_)
  68.         END
  69.       SET @r=@r+1
  70.       END
  71.      END
  72.    SET @n=(SELECT MIN(n) FROM @pago WHERE n>@n AND pag_total<@pag_total_idx)
  73.  END
  74.  DELETE FROM @Resultado
  75.  Final:
  76.  SELECT pag_id,pag_total FROM @Resultado ORDER BY n

Última edición por gnzsoloyo; 12/06/2015 a las 18:59 Razón: Código sin etiquetar
  #2 (permalink)  
Antiguo 12/06/2015, 16:43
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Buscar Resultado entre muchos montos

Como dice el buen LIBRAS, con una muestra de tus datos y tu salida, le dedicaríamos un tiempo a intentar darte un comentario
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 12/06/2015, 19:59
 
Fecha de Ingreso: octubre-2008
Mensajes: 9
Antigüedad: 16 años
Puntos: 0
Respuesta: Buscar Resultado entre muchos montos

Aca paso los datos

Tabla "pago"

pag_id pag_feca pag_monto pag_status

1 01/01/2015 2336.36 A
2 01/01/2015 6956.00 A
3 01/01/2015 1265.69 A
4 01/01/2015 9685.00 A
5 01/01/2015 8594.10 A
6 01/01/2015 4265.10 A
7 01/01/2015 6589.10 A

Ejecuto el sp anteriormente detallado con parametro por ejemplo 9292.36,"01/01/2015"
me devuelve

1 2336.36
2 6956.00

Ahora si busco un resultado que no se forma por montos que estan consecutivos, no me devuelve nada, ejeplo un resultado sumado por fila 1 fila 4 fila 6, no me lo trae.

Espero haberme podido expresar con claridad
  #4 (permalink)  
Antiguo 13/06/2015, 13:06
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Buscar Resultado entre muchos montos

a ver si entendi, por ejemplo si pongo 10, el query me tiene que regresar varias cantidades que sumadas me den 10????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 13/06/2015, 19:02
 
Fecha de Ingreso: octubre-2008
Mensajes: 9
Antigüedad: 16 años
Puntos: 0
Respuesta: Buscar Resultado entre muchos montos

Asi es el temas es que ya lo esta haciendo , pero solo lo hace si los montos estan consecutivos digamos si los montos para sumar 10 estan uno abajo del otro me los muestra ahora si formo 10 con registro que estan por ejemplo 2 en en id 1 , 3 en el id 10 , 7 en el id 55 no me lo muestra se entinde?
  #6 (permalink)  
Antiguo 13/06/2015, 19:06
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Buscar Resultado entre muchos montos

ok sigamos con el ejemplo del 10 si tengo estos valores

1
2
3
5

sumando esos me daria 10, pero si tengo estos, que valores son los que necesitarias??

5
6
2
3
5

porque el resultado de 10 me lo puede dar tanto 5+5=10 como 5+2+3=10 como 2+3+5=10

con cual me quedo????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 13/06/2015, 21:16
 
Fecha de Ingreso: octubre-2008
Mensajes: 9
Antigüedad: 16 años
Puntos: 0
Respuesta: Buscar Resultado entre muchos montos

No no es que no me muestra si hay otro valores a ver si logro explicar
Busco el valor 10 como decís

5
5
2
6
9

Si busco el valor 10 y este se forma por números que estén seguidos 1 abajo del otro me muestra los registro que lo conforma, el SP me muestra
5
5

Ahora si busco 10 de nuevo y la tabla esta de esta manera

5
2
6
9
5

Como ves los dos números que conforman el monto que busco no están ubicados de manera consecutiva, el sp no me los muestra me muestra como que no hay dos 5. me entiendes????
  #8 (permalink)  
Antiguo 15/06/2015, 15:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 9
Antigüedad: 16 años
Puntos: 0
Respuesta: Buscar Resultado entre muchos montos

Alguno que tenga una idea? de como solucionar lo que me falta del SP?
  #9 (permalink)  
Antiguo 15/06/2015, 17:42
 
Fecha de Ingreso: octubre-2008
Mensajes: 9
Antigüedad: 16 años
Puntos: 0
Respuesta: Buscar Resultado entre muchos montos

Revisando mas a fondo el SP el problema no es que no me encuentra un resultado formado entre digitos que no esten consecutivo, el problema es que estoy usando monto muy grandes 131.569.123,60 no me busca montos grandes los achique y me los encuentra que puede ser?
  #10 (permalink)  
Antiguo 17/06/2015, 09:28
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Buscar Resultado entre muchos montos

quizas un problema de tipo de dato.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 22/06/2015, 12:25
 
Fecha de Ingreso: octubre-2008
Mensajes: 9
Antigüedad: 16 años
Puntos: 0
Respuesta: Buscar Resultado entre muchos montos

No es un problema de tipo de dato ya lo controle

Etiquetas: procedimiento_almacenado, stored-procedure
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:28.