Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   sumar 2 campos de la misma tabla (https://www.clubdelphi.com/foros/showthread.php?t=80187)

edgar_prospero 07-09-2012 23:29:16

sumar 2 campos de la misma tabla
 
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:


Código Delphi [-]
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 :

Código SQL [-]
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

Cita:

Empezado por roman (Mensaje 442380)
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

Código SQL [-]
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

Código SQL [-]
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 :
Código SQL [-]
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:
Código SQL [-]
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
Código SQL [-]
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:

Código SQL [-]
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:
Código Delphi [-]
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

Cita:

Empezado por edgar_prospero (Mensaje 442373)
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:


Código Delphi [-]
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:

Código SQL [-]
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:


Código SQL [-]
SELECT nombre, codigo,  (SUM(cantidad)- SUM(cantsal)) AS cantidad FROM entradas  GROUP BY codigo

Casimiro Noteví 10-09-2012 21:03:45

Preguntas distintas en hilos distintos. Nuestra guía de estilo.
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 Noteví 10-09-2012 21:22:45

Cita:

Empezado por Casimiro Notevi (Mensaje 442680)
Preguntas distintas en hilos distintos. Nuestra guía de estilo.
Salvo que tenga que ver con la pregunta de que inició este hilo, claro.

Cita:

Empezado por edgar_prospero (Mensaje 442681)
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 Noteví 10-09-2012 21:30:17

Cita:

Empezado por roman (Mensaje 442689)
Muy bien. Pero tómalo en cuenta para la próxima :p :D
// Saludos

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


La franja horaria es GMT +2. Ahora son las 05:19:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi