locked
Restar saldo RRS feed

  • Pregunta

  • Buenas Noches.

    Tengo la siguiente consulta:

    select d.makey,d.mes,d.ano,cuota,p.SaldoImporte,saldoimporte - dbo.pagomensual(d.makey,D.mes,ano)SALDO, sum (case when tipdesc in(7,80,15,14,21,11)then ISNULL(dieco,0) else 0 end)as Amortiza, sum (case when tipdesc=2 then ISNULL(dieco,0) else 0 end )as interes from dscto d left outer join prestamo p on d.nro=p.idprestamo where d.estadoregistro <>'D' and makey=27999723 and p.IdPrestamo=80455 and(ano * 100) + mes >= convert(char(6),dateadd(mm,-40, getdate()), 112) group by d.makey,d.mes,d.ano,cuota,p.SaldoImporte

    y el resultado es

    mes año cuota importe saldoimporte pago interespagado

    9 2010 109.37 2000.00 2000.0000 0.00 0.00
    10 2010 109.37 2000.00 2000.0000 0.00 46.00
    11 2010 109.37 2000.00 2000.0000 0.00 46.00
    12 2010 109.37 2000.00 2000.0000 0.00 46.00
    4 2012 109.37 2000.00 1936.0000 64.00 46.00
    5 2012 109.37 2000.00 1934.5300 65.47 44.53
    6 2012 109.37 2000.00 1933.6500 66.35 43.02
    7 2012 109.37 2000.00 1932.0000 68.00 41.50
    8 2012 109.37 2000.00 1930.5600 69.44 39.93
    9 2012 109.37 2000.00 1928.9700 71.03 38.34
    10 2012 109.37 2000.00 1920.0000 80.00 36.70
    11 2012 109.37 2000.00 1925.4900 74.51 34.86
    12 2012 109.37 2000.00 1923.7800 76.22 33.15
    3 2013 109.37 2000.00 1922.0200 77.98 31.39
    4 2013 109.37 2000.00 1920.2300 79.77 29.60
    5 2013 109.37 2000.00 1302.7900 100.00 27.77
    6 2013 109.37 2000.00 1489.9800 100.00 11.73

    Tengo una funcion que me calcula el saldoimporte - el pago mensual, pero no esta funcionando, solo resta el primer registro donde hay pago..

    lo que estoy tratando de hallar es  la resta del (importe - pago)

    y que el saldoimporte disminuya mensualmente por los pago que se hallen .


    lutermick

    lunes, 28 de octubre de 2013 2:01

Respuestas

Todas las respuestas

  • Esta instruccion esta incorrecta

    ,saldoimporte - dbo.pagomensual(d.makey,D.mes,ano)SALDO

    Ante de llamar la funcion debe declarar los argumentos que le pasa, DECLARE @local_variable (Transact-SQL)

    o

    Crear el query dinamico sp_executesql (Transact-SQL)


    Angel R. Jimenez G.
    Santo Domingo
    Republica Dominicana
    Blog

    lunes, 28 de octubre de 2013 2:41
  • esta es mi funcion que estaba probando.

    ALTER function [dbo].[pagomensual](@codofin int,@mes int,@ano int)
    returns money
    as
    begin
    declare @caja money
    declare @dieco money
    declare @pago money
    set @caja =(select sum(monto)from caja where estadoregistro <>'D' and mes=@mes and ano=@ano and codofin=@codofin
    and transferencia in(7,80,15,14,21,11))
    set @dieco =(select sum (dieco)from dscto where estadoregistro <>'D'and mes=@mes and ano=@ano and makey=@codofin
    and tipdesc in(7,80,15,14,21,11))
    if @caja is null
    set @caja=0
    if @dieco is null
    set @dieco=0
    set @pago=(@caja + @dieco)
    if @pago is null
    set @pago=0
    return @pago
    end

    y aqui tengo 3 variables, que es codigo,mes y año.. por eso queria saber si podria  funcionar pasandole

    elcodigo,mes y año de mi consulta anterior


    lutermick

    lunes, 28 de octubre de 2013 2:50
  • Hola.

    Eso ya no depende de cómo invocar a la función (cosa que estás realizando correctamenet) sino de lo que la función realice internamente. Parece que necesitas un running total, pero no es eso lo que parece que hace esa función. Es más, no parece que pueda resolverse de ese modo.

    Tendrías que cruzar tu consulta original con la misma consulta, pero cruzando con el mes anterior, de modo que pudieras realizar el cómputo que deseas.

    Encontrarás varios ejemplos de esto mismo en el foro. Si de ese modo no lo resuelves, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    lunes, 28 de octubre de 2013 6:45
    Moderador
  • Es que esta invocando la funcion y en los argumentos esta poniendo campos de la tabla (dscto) y eso no se puede

    1.- Agregar variables ya inicializada con los valores deseados

    2.- Agregar un subquery que retorne estos tres valores.


    Angel R. Jimenez G.
    Santo Domingo
    Republica Dominicana
    Blog

    lunes, 28 de octubre de 2013 19:08
  • La verdad es que casi recién empece a usar funciones y aun no puedo resolver este problema.


    lutermick

    lunes, 28 de octubre de 2013 20:01
  • No entiendo muy bien

    Qué es "pago mensual"?

    Es decir la columna "Pago importe" debes restarle el calculo de otras tablas que dan el pago mensual?

    martes, 29 de octubre de 2013 1:28
  • Gracias por responder , te explico:

    en el select tengo

    sum (case when tipdesc in(7,80,15,14,21,11)then ISNULL(dieco,0) else 0 end)as Amortiza,

    que me muestra lo que se va pagando, lo que quiero es se reste el saldo inicial este caso seria 2000. 

    seria saldoimporte - amortiza

    y asi por cada pago que valla disminuyendo

    Qué es "pago mensual"?

    es una funcion que cree  para que me reste 

    saldoimporte - amortiza, pero como señale no me da resultado.


    lutermick

    martes, 29 de octubre de 2013 13:04

  • Ok, no dispongo de mucho tiempo para entender la lógica, pero trataré de ayudarte sin comprender la lógica del negocio.

    Tienes esta función.

    dbo.pagomensual(d.makey,D.mes,ano)SALDO,

    Ok, es una función escalar es decir devuelve un valor cada vez que la llamas, no devuelve una tabla. Le estás pasando tres parámetros de entrada. Esos parámetros de entrada deberían estar en el select. Bien toma cada uno de esos parametros del select y pásalos aparte a la función, es decir algo como:

    select dbo.pagomensual(1,1,2013)SALDO,
    select dbo.pagomensual(2,2,2013)SALDO,

    Suponiendo eso sean los valores que sabes deberian estar entrando por cada registro del select.

    Si te da correcto los resultados hay que seguir revisando sino es la función que está calculando lo que tenga que hacer mal.

    martes, 29 de octubre de 2013 16:10
  • Gracias Juliovbhlp, si hice por separado y si me da correcto la funcion, tengo la idea solo que o se como plasmarla.

    pensaba crear un while para que se ejecute , algo asi:

    mientras haya saldo while saldoimporte - pagohalladoenlafuncion...

    pero aun no se como plasmarlo.


    lutermick

    miércoles, 30 de octubre de 2013 3:40
  • Hola.

    ¿Lo resolviste? ¿Sabes ya cómo hacer un running total?


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    viernes, 15 de noviembre de 2013 17:05
    Moderador
  • Pues la verdad, no... he estado intentado hacerlo por aplicacion pero auno no logro solucionarlo.


    lutermick

    viernes, 15 de noviembre de 2013 17:23
  • Hola.

    ¿Has preparado al menos el running total? ¿Qué no puedes obtener? Si facilitas scripts de creación de tablas, scripts de inserción de datos de ejemplo y resultado que esperas, quizá podamos ayudarte de una forma más eficaz.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    domingo, 24 de noviembre de 2013 18:03
    Moderador
  • Al parecer, el OP perdió interés por el tema o lo resolvió por él mismo. Como no aporta más información, no hay por dónde continuar, doy el hilo por cerrado.

    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    domingo, 1 de diciembre de 2013 19:44
    Moderador