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

sumar 2 campos de la misma tabla
Comenzado por
edgar_prospero
, sep 07 2012 01:10
5 respuestas en este tema
#1
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:
#2
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:
Veamos que primero se obtienen ciertos valores con respecto a código y documento y lo denominamos A1:
Posteriormente hacemos lo mismo; pero la diferencia esta el el tipo de documento con respecto al anterior:
Ahora si notas vamos a unirlos a través del campo codigo que ambos subquerys tienen, esto se hace con:
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.
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.
#3
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
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
#4
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
#5
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í:
Saludox !
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 !

#6
Escrito 10 septiembre 2012 - 11:27
excelente respuesta es lo que necesitaba se soluciono mi problema 
saludos

saludos
