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


La franja horaria es GMT +2. Ahora son las 10:27:53.

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