PDA

Ver la Versión Completa : sumar 2 campos de la misma tabla


edgar_prospero
07-09-2012, 23:29:16
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

look
07-09-2012, 23:39:28
no tengo todo muy claro pero quiza te de una idea :


SELECT nombre, codigo,
(
(select sum(cantidad) from entradas where documento = 'E')
-
(select sum(cantidad) from entradas where documento = 'S')
) as Resultado
FROM entradas

edgar_prospero
07-09-2012, 23:43:10
si algo asi es lo que quiero pero has de cuenta que si tengo 5 entradas de un codigo y no tengo salidas pues el resultado seria 5 pero me pone null se puede hacer algo para mejorar eso??

roman
07-09-2012, 23:47:04
look, creo que habría que relacionar las subconsultas con la consulta principal porque si no, te dará la suma de entradas y salidas sin agrupar por código.

// Saludos

look
08-09-2012, 00:01:55
look, creo que habría que relacionar las subconsultas con la consulta principal porque si no, te dará la suma de entradas y salidas sin agrupar por código.

// Saludos

muy cierto amigo.

edgar_prospero
08-09-2012, 00:04:08
lo hice de esta manera pero solo me da resultados correctos cuando hay cantidad en entradas y salidas si en algun codigo nomas hay de entradas me manda null

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

look
08-09-2012, 00:10:58
SELECT nombre, codigo,
(
COALESCE((SELECT SUM(cantidad) FROM entradas WHERE documento = 'E') , 0)
-
COALESCE((SELECT SUM(cantidad) FROM entradas WHERE documento = 'S') , 0)
) AS Resultado
FROM entradas GROUP BY codigo

Caral
08-09-2012, 00:19:43
Hola
O Tambien :

SELECT nombre, codigo,
(
(SELECT SUM(cantidad) FROM entradas WHERE documento = 'E' and cantidad > 0)
-
(SELECT SUM(cantidad) FROM entradas WHERE documento = 'S' and cantidad > 0)
) AS Resultado
FROM entradas GROUP BY codigo
Saludos

edgar_prospero
08-09-2012, 00:50:18
pues ya voy avanzando con sus consejos pero ahora el problema esta en que me suma todos los codigos de entradas y todos los codigos de salidas y ya hace la resta y lo que necesito es que si hay un codigo por ejemplo as300 me los sume y se resten a los codigos as300 y si hay otro codigo porr ejemplo ar100 haga lo mismo no se si me explico

Caral
08-09-2012, 00:57:26
Hola
Vamos hombre:confused::D:

SELECT nombre, codigo,
(
(SELECT SUM(cantidad) FROM entradas WHERE documento = 'E' and cantidad > 0 and Codigo = :cod)
-
(SELECT SUM(cantidad) FROM entradas WHERE documento = 'S' and cantidad > 0 and Codigo = :cod)
) AS Resultado
FROM entradas GROUP BY codigo

o

SELECT nombre, codigo,
(
(SELECT SUM(cantidad) FROM entradas WHERE documento = 'E' and cantidad > 0)
-
(SELECT SUM(cantidad) FROM entradas WHERE documento = 'S' and cantidad > 0)
) AS Resultado
FROM entradas
Where Codigo = :Cod
GROUP BY codigo


Como te guste mas.:D
Saludos

edgar_prospero
08-09-2012, 01:11:17
pues no amigo me da error de sintaxis yo le hice asi me saca el reporte pero me sigue restando todas las entradas con todas lsa salidas y el reporte si me pone todos los codigo existentes pero en el resultado todos tienen lo mismo:

form4.tabla.SQL.Add( 'SELECT nombre, codigo, '+
'((SELECT SUM(cantidad) FROM entradas WHERE codigo>=:inicial and documento=:entradas and cantidad > 0)'+
' -(SELECT SUM(cantidad) FROM entradas WHERE codigo<=:final and documento=:salidas and cantidad > 0)'+
') AS cantidad FROM entradas GROUP BY codigo');


form4.tabla.ParamByName('inicial').ASstring:=inicial.text;
form4.tabla.ParamByName('final').ASstring:=final.Text;
form4.tabla.ParamByName('entradas').ASstring:=entradas.Text;
form4.tabla.ParamByName('salidas').ASstring:=salidas.Text;

form4.tabla.PREPARE;
form4.tabla.Active:=TRUE;
form13.informe.Preview;

Caral
08-09-2012, 01:16:54
Hola
No se por que codigo inicial y final si es el mismo ?
saludos

edgar_prospero
08-09-2012, 01:18:23
es que la consulta puede ser por un rango de codigos y dependiendo del rango que le pongan es como va a salir el reporte de existencias de cada producto

Caral
08-09-2012, 01:20:08
Hola
Por el tipo de codigo que tienes que no es consecutivo me parece dificil un rango, por fecha si.
Saludos

edgar_prospero
08-09-2012, 01:22:24
es que esta por orden de abecedario de todas formas siempre esta acomodado para quesalgan todos los registros porque en inicial seria el primero del abecedario y final pues el ultimo y en caso de que quisieran un reporte de un solo codigo nomas meten el mismo codigo en los 2 y listo asi es como se me ocurre

Caral
08-09-2012, 01:26:55
Hola
Veamos:

form4.tabla.SQL.Add( 'SELECT nombre, codigo, '+
'((SELECT SUM(cantidad) FROM entradas WHERE codigo>=:inicial and codigo<=:final and documento=:entradas and cantidad > 0)'+
' -(SELECT SUM(cantidad) FROM entradas WHERE codigo>=:inicial and codigo<=:final and documento=:salidas and cantidad > 0)'+
') AS cantidad FROM entradas GROUP BY codigo');


form4.tabla.ParamByName('inicial').ASstring:=inicial.text;
form4.tabla.ParamByName('final').ASstring:=final.Text;
form4.tabla.ParamByName('entradas').ASstring:=entradas.Text;
form4.tabla.ParamByName('salidas').ASstring:=salidas.Text;

form4.tabla.PREPARE;
form4.tabla.Active:=TRUE;
form13.informe.Preview;
Saludos

edgar_prospero
08-09-2012, 01:30:10
con este codigo si dejo todo el rango me vuelve a sumar todas la entradas y salidas y en el reporte me aparecen todos los codigos con el mismo numero pero si uso nomas un rango me aparece bien la operacion de ese rtango pero me vuelven a aparecer todos los codigos en el reporte con ese mismo resultado

Caral
08-09-2012, 01:32:01
Hola
terminaremos haciendo un hilo de 200 post otra vez :D:D
Ni idea amigo.!!!:-| :confused:
Saludos

edgar_prospero
08-09-2012, 01:33:25
jajaja pues ya ibamos para eso amigo pues ni modo de todas formas gracias me diste buen empuje le seguire buscando a ver si puedo dar con lo que quiero :)

Caral
08-09-2012, 01:34:59
Hola
Algun dia terminare aprendiendo.....
Saludos

roman
08-09-2012, 03:03:50
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

Creo que podemos simplificar esto, al menos en mysql:


select codigo, sum(if(documento = 'E', cantidad, -cantidad)) as resultado
from entradas
group by codigo


// Saludos

edgar_prospero
10-09-2012, 16:45:23
gracias por tu respuesta pero como podria acoplarlo a mi problema mira etsa seria mi base de datos claro hay mas campos pero ponder solo los que necesito que entrene en juego

codigo cantidad documento
a300 5 E
a300 5 E
a300 4 S
zx100 5 E

aqui el resultado que espero es A300= 6 (5 +5-4) y zx100=5

no se si logre explicarme

roman
10-09-2012, 17:11:16
Lo que te puse es la consulta sql para resolvar tu problema. No sé qué motor uses, quizá haya que adaptarlo.

// Saludos

edgar_prospero
10-09-2012, 17:12:19
la base de datos que uso es en mysql y en eso estoy tratando de adaptarlo :D

roman
10-09-2012, 17:26:10
Pues la consulta que te puse es para mysql, no deberías tener problemas.

// Saludos

edgar_prospero
10-09-2012, 19:30:57
ya por ultimo a ver si me puedes ayudar con esto: con el siguiente codigo logre hacer que me reste bien pero solo cuando hay entradas y salidas si por ejemplo en entradas tengo un producto con 5 existencias pues logico el resultado deberia ser 5 (5-0) pero no me sale null como puedo arreglar ese detalle:


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

Casimiro Notevi
10-09-2012, 21:03:45
Preguntas distintas en hilos distintos. Nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).
Salvo que tenga que ver con la pregunta de que inició este hilo, claro.

edgar_prospero
10-09-2012, 21:05:26
no es distinta es de lo mismo, como restar, pero ya lo solucione y tomare en cuenta tu comentario para la proxima con mis preguntas

saludos^\||/

roman
10-09-2012, 21:05:32
Mmm. No estoy seguro que sea otra pregunta. Me dio la impresión de que es la misma pero usó otra consulta distinta de las propuestas y que, por cierto, no entiendo.

// Saludos

Casimiro Notevi
10-09-2012, 21:22:45
Preguntas distintas en hilos distintos. Nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).
Salvo que tenga que ver con la pregunta de que inició este hilo, claro.
no es distinta es de lo mismo, como restar, pero ya lo solucione y tomare en cuenta tu comentario para la proxima con mis preguntas
saludos^\||/

Bueno, no se me enojen :p

roman
10-09-2012, 21:28:23
Muy bien. Pero tómalo en cuenta para la próxima :p :D

// Saludos

Casimiro Notevi
10-09-2012, 21:30:17
Muy bien. Pero tómalo en cuenta para la próxima :p :D
// Saludos

Intentaré leer la guía de estilo :o :)