Ir al contenido


Foto

sumar 2 campos de la misma tabla


  • Por favor identifícate para responder
5 respuestas en este tema

#1 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 07 septiembre 2012 - 01:10

que hay amigos hace dias hice una consulta aqui pero mejor cambie el diseño, y ahora viene mi duda tengo una tabla en la cual meto codigos de productos a veces hay varios registros con el mismo codigo la difrerencia esta en un campo que se llama documento los cuales unos son "S" y otros "E" lo que quiero haces es que se sumen por decir los codigos as3200 con documento "E" y se resten a los codigos "as3200" con documento "S" no se si me explique quise intentar algo pero como no tengo mucha idea de mysql pues me da cero:

SELECT nombre, codigo, SUM(cantidad)- SUM(cantidad) AS cantidad FROM entradas  WHERE documento=documento GROUP BY codigo

  • 0

#2 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 08 septiembre 2012 - 05:57

Hola edgar_prospero, te va dar siempre cero debido a que restas la misma suma, de momento se me ocurre algo fácil, vamos a dividir el caso y después solo los unimos para obtener el resultado deseado, se me ocurre lo siguiente:


SELECT A1.codigo, (A1.S - A2.E) as resultado
FROM(                     
    SELECT codigo, SUM(cantidad) As S
    FROM entradas
    WHERE codigo = 'as3200'  AND documento='S'
    GROUP BY CodGrupo) As A1 INNER JOIN

    (
    SELECT codigo, SUM(cantidad) As E
    FROM entradas
    WHERE WHERE codigo = 'as3200'  AND documento='E'
    GROUP BY CodGrupo) As A2 ON A1.codigo =  A2.codigo


Veamos que primero se obtienen ciertos valores con respecto a código y documento y lo denominamos A1:

    SELECT codigo, SUM(cantidad) As S
    FROM entradas
    WHERE codigo = 'as3200'  AND documento='S'
    GROUP BY CodGrupo) As A1


Posteriormente hacemos lo mismo; pero la diferencia esta el el tipo de documento con respecto al anterior:

    SELECT codigo, SUM(cantidad) As E
    FROM entradas
    WHERE WHERE codigo = 'as3200'  AND documento='E'
    GROUP BY CodGrupo) As A2 ON A1.codigo =  A2.codigo


Ahora si notas vamos a unirlos a través del campo codigo que ambos subquerys tienen, esto se hace con:

... INNER JOIN

......ON A1.codigo =  A2.codigo


Esto permite ahora verlo de forma tal que podemos realizar la operación que indicas sin problema; pudiera existir otra manera pero no se me ocurre de momento, espero haberte ayudado un poco, no he probado el query, pudiera existir detalles de sintaxis.

saludos.
  • 0

#3 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 10 septiembre 2012 - 08:03

pues no pude adaptarlo muy bien a lo que busco no se si tu ejemplo es cuando son campos de tablas diferentes y yo tengo en la misma tabla, queiro sumar un solo campo llamado cantidad pero lo que hace la diferencia es un campo llamado documento que puede ser "E" o "S"
codigo  cantidad    documento
a300          5                  e
a300          3                  s
a250          6                  e

algo asi esta mi base de datos claro con mas  campos pero estos son los que necesito echar a funcionar, en este ejemplo el resultado deberia de darme a300=2 y a250=6

  • 0

#4 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 10 septiembre 2012 - 11:18

ya logre hacer en parte lo que queria pero ahora tengo en detalle si en entradas tengo un codigo con 5 registros y en salidas no tengo ese codigo el resultado deberia de ser 5 pero me aparece null este es el codigo que utilizo

SELECT nombre, codigo,  (SUM(cantidad)- SUM(cantsal)) AS cantidad FROM entradas  GROUP BY codigo

  • 0

#5 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 10 septiembre 2012 - 11:25

Existe una función llamada coalesce que te permite discriminar los valores nulos, ya que al momento de hacer una operación aritmética con un valor nulo, regresa el resultado como valor nulo...

Es decir : VALOR + NULO = NULO o VALOR - NULO = NULO

Por lo que podrías usar un coalesce al hacer tus sumatorias, de tal manera que si detecta un valor en nulo (como es tu caso) pueda discrminarlo y cambiarlo por un cero de tal manera que puedas hacer tus operaciones sin problemas... quedaría algo así:

SELECT nombre, codigo,  (coalesce(SUM (cantidad),0)- coalesce(SUM(cantsal),0)) AS cantidad FROM entradas  GROUP BY codigo


Saludox ! :)


  • 0

#6 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 10 septiembre 2012 - 11:27

excelente respuesta es lo que necesitaba se soluciono mi problema  :cool:

saludos (b)
  • 0




IP.Board spam blocked by CleanTalk.