
restar un mismo campo de una tabla
#1
Escrito 24 septiembre 2012 - 10:58
#2
Escrito 24 septiembre 2012 - 11:07
Select (Select Sum(Cantidad) From Tabla where documento="E") -
(Select Sum(Cantidad) From Tabla where documento="S") Total
#3
Escrito 24 septiembre 2012 - 11:16
#4
Escrito 24 septiembre 2012 - 11:22
ok... lo ideal sería tomar los datos de código y nombre de tu catálogo de artículos pero como no se la estructura de tus tablasl o sacare de tus tablas de operación, que aclaro es algo ineficiente
Select Distinct Datos.Codigo, Datos.Nombre
coalesce(Entradas.Entradas,0) -
coalesce(Salidas.Salidas,0) CantidadTotal
From TablaDatos Datos
Left join (
Select Codigo, Sum(Cantidad) Entradas
from TablaDatos
WHERE documento="E"
Group by Codigo
) Entradas
On Datos.Codigo = Entradas.Codigo
Left join (
Select Codigo, Sum(Cantidad) Salidas
from TablaDatos
WHERE documento="S"
Group by Codigo
) Salidas
On Datos.Codigo = Salidas.Codigo
#5
Escrito 24 septiembre 2012 - 11:33
CODIGO NOMBRE DOCUMENTO CANTIDAD
A01 BURO E 15
A01 BURO E 3
A01 BURO S 10
entonces en mi reporte quiero qe me salga de la siguiente forma
CODIGO NOMBRE TOTAL
A01 BURO 8
#6
Escrito 24 septiembre 2012 - 11:46
entonces en mi reporte quiero qe me salga de la siguiente forma
CODIGO NOMBRE TOTAL
A01 BURO 8
La segunda consulta da de hecho ese resultado.... qué problema te da
#7
Escrito 24 septiembre 2012 - 11:48
Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COALESCE(Entradas.Entradas,0) -
COALESCE(Salidas.Salidas,0) Cant' at line 2
Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000
#8
Escrito 24 septiembre 2012 - 11:53
prueba quitando la función coalesce y el alias...
#9
Escrito 24 septiembre 2012 - 11:57
Error Code : 1305
FUNCTION datos.Nombre does not exist
Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000
y si le quito la parte de datos me pone lo siguiente:
Error Code : 1052
Column 'Codigo' in field list is ambiguous
Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000
#10
Escrito 24 septiembre 2012 - 12:02
la version que tengo es esta: appserv-win32-2.5.10, ahora me esta marcando esto:
Esa es la versión del paquete... yo te preguntaba la versión de mysql.
Select Datos.Codigo, Datos.Nombre,
Entradas.Entradas - Salidas.Salidas
From (
Select distinct Codigo, Nombre
From TablaDatos
) Datos
Left join (
Select Codigo, Sum(Cantidad) Entradas
from TablaDatos
WHERE documento="E"
Group by Codigo
) Entradas
On Datos.Codigo = Entradas.Codigo
Left join (
Select Codigo, Sum(Cantidad) Salidas
from TablaDatos
WHERE documento="S"
Group by Codigo
) Salidas
On Datos.Codigo = Salidas.Codigo
a ver ahora

#11
Escrito 24 septiembre 2012 - 12:14
#12
Escrito 24 septiembre 2012 - 12:19

#13
Escrito 24 septiembre 2012 - 12:28
p
rocedure TForm12.imprimirClick(Sender: TObject); begin tabla.close ; tabla.SQL.Clear; tabla.sql.add('SELECT Datos.Codigo, Datos.Nombre, COALESCE(Entradas.Entradas,0) - COALESCE(Salidas.Salidas,0) cantidad '+ 'FROM (SELECT DISTINCT Codigo, Nombre FROM entradas) Datos LEFT JOIN ( SELECT Codigo, SUM(Cantidad) Entradas'+ 'FROM entradas WHERE documento=:doc1 and codigo<= :inicial GROUP BY Codigo) Entradas ON Datos.Codigo = Entradas.Codigo LEFT JOIN (SELECT Codigo, SUM(Cantidad) Salidas FROM entradasWHERE documento= :doc2 codigo<= :final GROUP BY Codigo)'+ 'Salidas ON Datos.Codigo = Salidas.Codigo '); tabla.ParamByName('inicial').Asstring:=inicial.Text; tabla.ParamByName('final').Asstring:=final.Text; tabla.ParamByName('doc1').Asstring:=doc1.Text; tabla.ParamByName('doc2').Asstring:=doc2.Text; tabla.PREPARE; tabla.Active:=TRUE; form13.reporte.Preview; inicial.SetFocus; end;
pero me sale un error el cual es el siguiente:
#42000 you have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' entradas where documento=? and codigo<=?' group by codigo) entradas ON Datos.cod at line1.
#14
Escrito 24 septiembre 2012 - 12:33
#15
Escrito 24 septiembre 2012 - 12:44
procedure TForm12.imprimirClick(Sender: TObject); begin tabla.close ; tabla.SQL.Clear; tabla.sql.add('SELECT Datos.Codigo, Datos.Nombre, '+ 'COALESCE(Entradas.Entradas,0) - COALESCE(Salidas.Salidas,0) cantidad'+ ' FROM ('+ ' SELECT DISTINCT Codigo, Nombre '+ ' FROM entradas '+ ' ) Datos '+ 'LEFT JOIN ( '+ 'SELECT Codigo, SUM(Cantidad) Entradas '+ ' FROM entradas '+ 'WHERE documento="E" and codigo>=:inicial '+ ' GROUP BY Codigo '+ ') Entradas '+ ' ON Datos.Codigo = Entradas.Codigo '+ 'LEFT JOIN ( '+ ' SELECT Codigo, SUM(Cantidad) Salidas '+ ' FROM entradas '+ ' WHERE documento="S" and codigo<=:final '+ ' GROUP BY Codigo '+ ' ) Salidas '+ ' ON Datos.Codigo = Salidas.Codigo'); tabla.ParamByName('inicial').Asstring:=inicial.Text; tabla.ParamByName('final').Asstring:=final.Text; tabla.PREPARE; tabla.Active:=TRUE; form13.reporte.Preview; inicial.SetFocus; end;
#16
Escrito 24 septiembre 2012 - 01:02
Tabla.close; Tabla.SQL.Clear; tabla.sql.text := ' SELECT Datos.Codigo, ' + ' Datos.Nombre, ' + ' COALESCE(Entradas.Entradas,0) - COALESCE(Salidas.Salidas,0) cantidad ' + ' FROM (SELECT DISTINCT Codigo, Nombre ' + ' FROM entradas ' + ' Where Codigo >= ' + inicial.Text + ' And ' + ' Codigo <= ' + Final.Text + ' ) Datos ' + ' LEFT JOIN ( SELECT Codigo, SUM(Cantidad) Entradas ' + ' FROM entradas ' + ' WHERE documento="E" and ' + ' Codigo >= ' + inicial.Text + ' And ' + ' Codigo <= ' + Final.Text + ' GROUP BY Codigo ' + ' ) Entradas ' + ' ON Datos.Codigo = Entradas.Codigo ' + ' LEFT JOIN ( SELECT Codigo, SUM(Cantidad) Salidas ' + ' FROM entradas ' + ' WHERE documento="S" and ' + ' Codigo >= ' + inicial.Text + ' And ' + ' Codigo <= ' + Final.Text + ' GROUP BY Codigo ' + ' ) Salidas ' + ' ON Datos.Codigo = Salidas.Codigo '; Tabla.Active:=TRUE; form13.reporte.Preview; Inicial.SetFocus;
#17
Escrito 24 septiembre 2012 - 01:10
