none
Actualización compleja. RRS feed

  • Pregunta

  • Hola amigos.

    Tengo una tabla con los siguientes campos:

    Debito1    Credito1    Debito2    Credito2

    45             30

    65             87

    El resultado de de los restantes campos es una resta de los dos valores de la linea. Entonces, debe existir la condicion de que si un campo tiene un monto mayo, entonces se resta primero ese monto del menor, cosa que no resulte en un valor negativo. Pero, que si el monto mayo esta en el Debito1, se coloca el resultado en Debito2 y asi con los demas. 

    Estuve intentando algo como esto, sé que tiene errores, pero fue donde pude llegar.

    UPDATE Saldos
    SET debito2 = deb, credito2=cred
    FROM Saldos, (SELECT iif(debito1 > credito1, sum(debito1-credito1) as deb, sum(credito1-debito1) as cred)
    FROM            Saldos
    WHERE cuenta=cuenta)
    Gracias por su ayuda.

    jueves, 21 de junio de 2018 4:17

Respuestas

  • Estimado Formulaz5:

    Tirar piedras encima de quien te intenta ayudar, además de cuando tu planteamiento no esta bien precisado, a mi personalmente no me parece lógico. No obstante

    create table saldos (cuenta int, debito1 int, credito1 int, debito2 int, credito2 int)
    go
    insert into saldos (cuenta, debito1, credito1) values (1,45,30)
    insert into saldos (cuenta, debito1, credito1) values (2,65,87)
    go
    
    update saldos set debito2 = o.debito2 from saldos inner join (
    select o.cuenta, o.debito1, o.credito1, 
    	case when debito1>credito1 then debito1-credito1 else credito1-debito1 end as debito2
    	
      from saldos o) as o on saldos.cuenta = o.cuenta
    
      
    
    

    Solo te he realizado una columna, supongo que con la otra ya podrás armarla tú.

    Como observarás, la update se puede hacer contra una select relacionando tu campo clave cuenta.

    Un saludo

    jueves, 21 de junio de 2018 5:49

Todas las respuestas

  • Hola Formulaz5:

    ¿Que significa monto mayo?, ya que de lo poco que se ve de la tabla, sale que se llama saldos y que puede tener 4 columnas.

    No hay un campo fecha.....o algo similar para deducir.

    La mejor manera de plantear la duda es que, nos des cual es el resultado a obtener.

    Cual es la tabla, y una serie de valores cargados.

    En el managment studio, haciendo click sobre la tabla con el botón derecho, tienes un generar script. De ahi, sacas la tabla, no hace falta que lo pegues completo, solo los campos que son interesantes.

    Gracias

    jueves, 21 de junio de 2018 5:20
  • Gracias por tu detenimiento.

    Pero solo falta una (r) para deducir que quiere decir "mayor" o monto mayor. 

    Pero bien. Creo que no hace falta mas detalles de tabla para generar el ejemplo o ayuda.

    Te hace falta tanto el nombre de la tabla, mas cuando lo he dado en el ejemplo?

    Si no puedes con esto, pues es simple, déjalo pasar y que otro ayude.

    Gracias. Pero estoy estresado con esto y mas. 

    jueves, 21 de junio de 2018 5:33
  • Estimado Formulaz5:

    Tirar piedras encima de quien te intenta ayudar, además de cuando tu planteamiento no esta bien precisado, a mi personalmente no me parece lógico. No obstante

    create table saldos (cuenta int, debito1 int, credito1 int, debito2 int, credito2 int)
    go
    insert into saldos (cuenta, debito1, credito1) values (1,45,30)
    insert into saldos (cuenta, debito1, credito1) values (2,65,87)
    go
    
    update saldos set debito2 = o.debito2 from saldos inner join (
    select o.cuenta, o.debito1, o.credito1, 
    	case when debito1>credito1 then debito1-credito1 else credito1-debito1 end as debito2
    	
      from saldos o) as o on saldos.cuenta = o.cuenta
    
      
    
    

    Solo te he realizado una columna, supongo que con la otra ya podrás armarla tú.

    Como observarás, la update se puede hacer contra una select relacionando tu campo clave cuenta.

    Un saludo

    jueves, 21 de junio de 2018 5:49
  • Muy agradecido.

    Es lo que esperaba. Lo demás lo hago, tienes razón.

    Sin embargo, no te di mas datos, mas bien "piedras". Y lo lograste. Me parece que fuiste mas observador del planteamiento.

    Gracias. Te voté la respuesta.

    jueves, 21 de junio de 2018 6:02
  • De nada
    jueves, 21 de junio de 2018 6:06