none
restar en sql

    Pregunta

  • Hola me podrian ayudar en esta consulta estoy sumando todos los campos que encuentre, ahora quiero hacer los mismo pero para una resta

    me podrian ayudar

    no se si alla algo parecido a SELECT SUM(Assort)

    o como puedo hacer una resta pero para varios campos.

    SELECT SUM(Assort) AS TOTAL FROM DETALLE WHERE (mes = '9') AND (Parte = @parte) AND (a¤o = @a¤o) AND (IdAssort = @IdAssort)

    • Cambiado jtorrecillaMVP miércoles, 18 de agosto de 2010 11:05 Es una pregunta mas bien de SQL que de VB (De:Lenguaje VB.NET)
    martes, 17 de agosto de 2010 18:06

Respuestas

  • una operacion de resta como agregacion no tienes

    Funciones de agregado (Transact-SQL)

    por ahi deberias tomar los campos ha restar y usar el "-"

    SELECT campo1 - campo2 as Resta FROM <tabla>


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta juan11mh martes, 17 de agosto de 2010 18:21
    martes, 17 de agosto de 2010 18:14
  • Hola.

    Prueba lo siguiente, multiplica "Assort" por "-1" cuando operador sea "-" y por 1 cuando operador sea "+".  Y lo sumas todo. Sería más o menos así:

    select sum(case operador when '+' then 1 else -1 end * Assort) as TOTAL from Detalle...

    Si no lo logras, nos dices.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    jueves, 19 de agosto de 2010 11:50

Todas las respuestas

  • una operacion de resta como agregacion no tienes

    Funciones de agregado (Transact-SQL)

    por ahi deberias tomar los campos ha restar y usar el "-"

    SELECT campo1 - campo2 as Resta FROM <tabla>


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta juan11mh martes, 17 de agosto de 2010 18:21
    martes, 17 de agosto de 2010 18:14
  • si lenadro si se puede hacer compo1-campo2 from tabla pero en mi caso cuando consulto y si son mas de dos campos, por que mis consultas varian es por eso que quiero hacer lago parecido al select SUM() para que me tome encuenta todos los campos que se pàrescan no se si me explico lenadro

     

    martes, 17 de agosto de 2010 18:23
  • hola alguien me puede ayudar

    miern les comento tengo una tabla donde quiero que haga una suma o una resta deacuer a al query

    por ejemplo tengo un campo que se llama operador

    y otro parte y otro total

    quiero que cuando selecciones parte

    les pongo de como esta mi tablita

    numeroparte          total    operador

       parte1                100          +

       parte1                200          +

       parte3                300           -

       parte3                400           -

       parte1                500           +

    lo que quiero hacer es cuando selecione en el query ''parte1'' si el operador es es + que me sume los totales

    y si selecciono parte 3 y si el operador el - que me reste los totales.

    no se me explico

    martes, 17 de agosto de 2010 21:44
  • hola

    el tema aqui es que la operacion es condicional al valor del campo que define la operacion

    quizas con el uso del CASE WHEN se pueda implementar, pero no se si estas saundo Sql Server como base de datos, ya que serian instrucciones muy particulares del motor

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 18 de agosto de 2010 3:34
  • si leandro estoy usando sql servere 2005 no se si aplique lo que tu dices 
    miércoles, 18 de agosto de 2010 11:00
  • Hola Juan11mh te voy a mover la consulta a SQL, donde te van a dar una respuesta mas acorde.
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    miércoles, 18 de agosto de 2010 11:05
  • Hola.

    Si tu cuestión aún no ha quedado resuelta, por favor indica qué campos quieres restar en tu tabla.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    miércoles, 18 de agosto de 2010 11:24
  • mira la verdad tengo muchos compos no son unicos estos van a estar cambiendo constantemente es por eso que en el campo operador tengo los positivos y los negativos quiero que cuando consulte una parte del base de datos y dependiendo si es resta o es suma mira te pongo las consultas que estoy haciendo.

     

    Dim sqlmarzo As String = "SELECT SUM(Assort) AS TOTAL FROM DETALLE WHERE (mes = '3') AND (Parte = @parte) AND (año = @año) AND (IdAssort = @IdAssort)"

    asi es como cosulto en la base de datos pero ahora pero eso es cuendo en el campo operador=+

    pero ahora quiero que reste cuando encuentre en le campo operador =- reste

    no se si me estoy explicando bien.

    miércoles, 18 de agosto de 2010 14:34
  • Hola.

    Prueba lo siguiente, multiplica "Assort" por "-1" cuando operador sea "-" y por 1 cuando operador sea "+".  Y lo sumas todo. Sería más o menos así:

    select sum(case operador when '+' then 1 else -1 end * Assort) as TOTAL from Detalle...

    Si no lo logras, nos dices.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    jueves, 19 de agosto de 2010 11:50
  • si esa operacion esta bien

    pero no me da el resultado que yo quiero por ejemplo en esta consta si me toma los valores y me los resta

    SELECT     SUM(CASE operador WHEN '+' THEN 1 ELSE - 1 END * Assort) AS TOTAL
    FROM         DETALLE
    WHERE     (parte = '64112/3 ET500-L') AND (mes = '8')

    6180.0000

    549.0000

    11409.0000

    eson los los numero que me resta

    y me da este resultado

    -18138.0000 pues en si si hace la operacion de resta, pero yo no kiero ese tipo de resta lo que yo kiero es ver este resultado

    que me tome el mayor y que los demas los reste

    11409.0000 - 549.0000- 6180.0000= 4680 no se si me puedan ayudar a que me de este resultado como les digo la consulta que me pasaste esta muy bien pero ese no es el resultado al que quiero llegar lo que quiero es llegar al segundo resultado  a ver si me pueden hechar una mano. gracias

     

    jueves, 19 de agosto de 2010 23:50
  • tengo esta consulta donde me toma de mayor a menor pero ahora como le digo que el primer valor sea positivo para que ahoar si me haga la operacion correcta

    SELECT     SUM(CASE operador WHEN '+' THEN 1 ELSE - 1 END * Assort) AS TOTAL
    FROM         DETALLE
    WHERE     (parte = '64112/3 ET500-L') AND (mes = '8')
    ORDER BY Assort DESC

    por que anterior mente lo que me hacia era esto

    -6180.0000 -549.0000 -11409.0000= -18138.0000

    ahora con esa consulta ya me acomoda de mayor a menor

    -11409.0000 -6180.0000 -549.0000 = -18138.0000

    ya nada mas lo que quierio que el primer valor a la hora de consultar me lo ponga en positivo y ahora si ya me pondar bien el resultado

    queradia algo como esto.

    11409.0000 -6180.0000 -549.0000 = 4680

    a ver si me pueden ayudar gracias.

    viernes, 20 de agosto de 2010 0:37
  • Hola.

    Lo que expones ahora no se parece en nada a lo que preguntabas inicialmente. Así, antes había que basar el signo en un campo (campo "operador") y ahora dices que no, que el mayor valor es el positivo y los demás son negativos. Quiero resaltar que este requerimiento es más que curioso, me gustaría saber algo más de la lógica del requerimiento, para saber la casuística a la que aplica.

    En cuanto a cómo lograrlo, es bastante sencillo, basta con hacerlo en dos pasos, primero calculas el mayor valor y luego le restas la suma de todos los demás. Sería más o menos así:

    declare @mayorvalor numeric (12,2)
    
    select @mayorvalor = max(Assort) from Detalle where parte = '64112/3 ET500-L' AND mes = '8'
    
    select TOTAL = @mayorvalor - sum(Assort) from Detalle where parte = '64112/3 ET500-L' AND mes = '8' and Assort < @mayorvalor
    


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    viernes, 20 de agosto de 2010 21:38