none
Procedimiento Update para restar una columna con un parametro RRS feed

  • Pregunta

  • Buen dia, tengo el siguiente problema.

    deseo restar un valor @Amor de una columna en una tabla en SQL pero que le lo haga año tas año, es decir que primero me reste el valor del primer año (menor) y si queda saldo del valor @Amor me lo reste del segundo año y así sucesivamente; mi procedimiento y mi tabla son los siguientes:

    ALTER proc [dbo].[Editar_Provicional_Acuerdo]
    @Amor decimal (12,2),
    @NAcuerdo int,
    
    @Año varchar (4),
    
    @CodigoPredio varchar (15)
    as
    update ProvicionalAcuerdo set TotalAPagar = TotalAPagar-@Amor 
    where  (NAcuerdo= @NAcuerdo and Estado= 'Activo')


    JorgeLeonardoDC

    jueves, 29 de junio de 2017 15:06

Todas las respuestas

  • Es conveniente que en lugar de imágenes pegues código, que nos sirve para darte una solución sin teclear tanto.

    Esta es la que yo te prpongo 

    use tempdb
    go
    drop table pagospendientes
    go
    create table pagospendientes (idpago int identity(1,1),fechaprevista date, importe money)
    go
    insert into pagospendientes (fechaprevista,importe) values('20170101',1500),('20170201',1500),('20170301',1500),('20170401',1500),('20170501',1500),('20170601',1500)
    go
    declare @importeaAmortirzar money
    set @importeaAmortirzar=4750;
    
    with a as(select idpago,fechaprevista,Importe,sum(importe) over (order by fechaprevista) SaldoAcum  from pagospendientes)
    select *,@importeaAmortirzar-SaldoAcum From a ;
    with a as(select idpago,fechaprevista,importe,sum(importe) over (order by fechaprevista) SaldoAcum  from pagospendientes)
    update p  
    set importe=case when @importeaAmortirzar-saldoacum>p.importe then 0 else p.Importe -(@importeaAmortirzar-saldoacum) end  From a  inner join pagospendientes p on a.idpago=p.idpago
    where @importeaAmortirzar-saldoacum>0
    go
    select * from pagospendientes
    y este el resultado que yo obtengo 


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 29 de junio de 2017 15:37
    Moderador
  • Pero necesito Colocarle los filtros de NAcuedo y Estado en la tabla de ProviconalAcuerdo

    JorgeLeonardoDC

    jueves, 29 de junio de 2017 17:12
  • hice mi código según lo anterior pero a la hora de modificarme la tabla ProvicionalAcuerdo No lo hace, este es mi código y el resultado:

    declare @Acuerdo Decimal(12,2)
    set @Acuerdo = 600;
    
    
    with a as (SELECT 
    		ProvicionalAcuerdo.NAcuerdo ,
    		ProvicionalAcuerdo.año ,
    		ProvicionalAcuerdo.InteresMoratorio ,
    		ProvicionalAcuerdo.TotalAPagar ,
    		SUM(TotalAPAgar) over (order by Año) SumaTotal, 
    		ProvicionalAcuerdo.Estado 
    	    
            FROM ProvicionalAcuerdo        
    	    WHERE (NAcuerdo = 55 and Estado= 'Activo'))
    		select *, @Acuerdo - SumaTotal from a;
    
    		with a as(select NAcuerdo, Año, TotalAPagar, sum(Totalapagar) over (order by Año) SumaTotal  
    		from ProvicionalAcuerdo)
    
            update P 
            set TotalAPagar =case when @Acuerdo-SumaTotal >P.TotalAPagar 
    		then 0 else P.TotalAPagar -(@Acuerdo - SumaTotal )
            end  
    		
    		From a  inner join ProvicionalAcuerdo P on a.NAcuerdo =P.NAcuerdo 
            
    		where (@Acuerdo -SumaTotal>0  and P.NAcuerdo = 55 and P.Estado= 'Activo')
    
    		select * from ProvicionalAcuerdo 

    pero en la columna TotalAPagar no se modifican los valores


    JorgeLeonardoDC

    martes, 4 de julio de 2017 21:35