none
Restar 2 columnas especificas RRS feed

  • Pregunta

  • Buen Dia!

    Estoy haciendo un sistema de pago y quiero que se resten 2 columnas de una fila especifica 

    por ejemplo:

    tengo mi tabla CARGO  a si 

    | IdCargo | Monto | Cobrado | Saldo | Abono |

    |     1      | 300.00 | 0.00    | 300    | 0.00        |

    lo que quiero hacer es que al momento de ingresar el abono se reste al saldo y que en cobrado aparezca cuanto abonó , ejemplo

    | IdCargo | Monto | Cobrado | Saldo | Abono |

    |     1      | 300.00 | 200    | 100     |  200     |

    como hago el store procedure para que se quede guardado :( alguien ayudeme

    lunes, 8 de agosto de 2016 16:11

Respuestas

  • Me gusta lo que me recomiendas pero es que como estoy migrando un programa que ya tienen , no le quiero mover la verdad a si lo quiero dejar .. pero como quiera gracias :)

    De acuerdo. Sin embargo no sólo debes de actualizar la columna [Cobrado], sino también la columna [Saldo]. El procedimiento debería ser el siguiente:

    CREATE PROCEDURE dbo.MyProcedure
    	@id int,
    	@Abono decimal (9,2)
    AS
    BEGIN
    	UPDATE MiTabla
    	SET
    		Cobrado = Cobrado + @Abono,
    		Saldo = Saldo - @Abono,
    		Abono = @Abono
    	WHERE
    		(IdCargo = @id);
    END
    GO



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Josue ELi martes, 9 de agosto de 2016 15:05
    martes, 9 de agosto de 2016 14:57
  • create proc spProcedure

    @abono int, @id int as

    declare @cobrado int

    set @cobrado = (Select Saldo from tabla WHERE IdCargo = @id) - @abono update tabla set Cobrado = @cobrado where IdCargo = @id go


    Mi Blog

    Marca como respuesta si te sirvio.


    • Editado Misael Alanis lunes, 8 de agosto de 2016 18:01
    • Marcado como respuesta Josue ELi martes, 9 de agosto de 2016 14:43
    lunes, 8 de agosto de 2016 17:56

Todas las respuestas

  • create proc spProcedure
    @monto int,
    @saldo int,
    @abono int
    as
      declare @cobrado int
      set @cobrado = @abono - @saldo
      INSERT INTO tabla(monto,cobrado,saldo,abono) values(@monto,@cobrado,@saldo,@abono);
    go
    Blog




    • Editado Misael Alanis lunes, 8 de agosto de 2016 16:23
    • Marcado como respuesta Josue ELi lunes, 8 de agosto de 2016 17:45
    • Desmarcado como respuesta Josue ELi lunes, 8 de agosto de 2016 17:45
    lunes, 8 de agosto de 2016 16:17
  • y para especificar a que fila de la tabla le hare la resta de las columnas?
    lunes, 8 de agosto de 2016 16:34
  • Creo que no me explique bien :( osea ya tengo el registro , solo necesito que se actualice con la resta los campos que ya estan en el registro
    lunes, 8 de agosto de 2016 16:36
  • Update NombreTablaOut Set Columna = (SELECT (campo1 - campo2) from NombreTablaIN Where CampoIN=@condicionIN) Where CampoOut =@condicionOut

    EFRAIN MEJIAS C VALENCIA - VENEZUELA



    lunes, 8 de agosto de 2016 16:43
  • create proc spProcedure
    @id int
    as
      update tabla set
      Cobrado =  (Select (Abono - Saldo) from tabla WHERE IdCargo = @id)
      where IdCargo = @id
    go
    
    Espero y te sirva
    Blog
    lunes, 8 de agosto de 2016 16:56
  • okey , todo esta bien solo que me falta un detalle... en la columna de abono es donde voy a ingresar cuanto abono y lo demas se queda estatico para que pueda hacer la resta , ahi se se tiene que hacer otra funcion o como ?
    lunes, 8 de agosto de 2016 17:45
  • create proc spProcedure

    @abono int, @id int as

    declare @cobrado int

    set @cobrado = (Select Saldo from tabla WHERE IdCargo = @id) - @abono update tabla set Cobrado = @cobrado where IdCargo = @id go


    Mi Blog

    Marca como respuesta si te sirvio.


    • Editado Misael Alanis lunes, 8 de agosto de 2016 18:01
    • Marcado como respuesta Josue ELi martes, 9 de agosto de 2016 14:43
    lunes, 8 de agosto de 2016 17:56
  • Josue ELi,

    Una operación de cobranza no debería registrar los abonos efectuados sobre una misma fila. Si tienes una deuda por cobrar, lo correcto es que registres todos los abonos realizados, cada operación tiene información relevante como el monto abonado o la fecha de operación.

    Te recomiendo que cambies el diseño de tablas por lo siguiente:

    [DeudasPorCobrar]: idDeuda (PK), idCliente (FK), MontoDeuda, [TotalAbonos], [Saldo]

    [Abonos]: idAbono (PK), idDeuda (FK), NumCuota, FechaOperacion, Abono

    La tabla [DeudasPorCobrar] contiene el registro de la deuda y sobre ella puedes hacer las actualizaciones para calcular -opcionalmente- el total de pagos realizados y el saldo. Por cada abono realizado debes insertar una fila en la tabla [Abonos] de modo que la suma de los pagos menos el monto de deuda determina el saldo.

    Lo dejo a tu consideración.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Josue ELi martes, 9 de agosto de 2016 14:43
    • Desmarcado como respuesta Josue ELi martes, 9 de agosto de 2016 14:43
    lunes, 8 de agosto de 2016 23:51
  • Me gusta lo que me recomiendas pero es que como estoy migrando un programa que ya tienen , no le quiero mover la verdad a si lo quiero dejar .. pero como quiera gracias :)
    martes, 9 de agosto de 2016 14:44
  • Esta bien el codigo si me lo resta , solo que en la columna de abono me sale NULL 
    martes, 9 de agosto de 2016 14:54
  • Me gusta lo que me recomiendas pero es que como estoy migrando un programa que ya tienen , no le quiero mover la verdad a si lo quiero dejar .. pero como quiera gracias :)

    De acuerdo. Sin embargo no sólo debes de actualizar la columna [Cobrado], sino también la columna [Saldo]. El procedimiento debería ser el siguiente:

    CREATE PROCEDURE dbo.MyProcedure
    	@id int,
    	@Abono decimal (9,2)
    AS
    BEGIN
    	UPDATE MiTabla
    	SET
    		Cobrado = Cobrado + @Abono,
    		Saldo = Saldo - @Abono,
    		Abono = @Abono
    	WHERE
    		(IdCargo = @id);
    END
    GO



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Josue ELi martes, 9 de agosto de 2016 15:05
    martes, 9 de agosto de 2016 14:57
  • Gracias brother :) ya me salio 
    martes, 9 de agosto de 2016 15:05
  • y gracias por lo de cobrado , tienes mucha razon , era lo que me iba hacer falta para acumular todo lo que esta pagando un usuario :)
    martes, 9 de agosto de 2016 15:07