Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   sumar columnas en un dbgrid y mostrar mas campos (https://www.clubdelphi.com/foros/showthread.php?t=44165)

VNyes 30-05-2007 11:18:17

sumar columnas en un dbgrid y mostrar mas campos
 
buenas a todos los que lean y puedan darme una mano en esto:
Tengo las sgtes tablas:

Código SQL [-]
CREATE TABLE ORDENES (
ORD_ID D_ORD_ID,
ORD_COD VARCHAR(5),
ORD_FECHA DATE,
MAT_ID D_MAT_ID)

CREATE TABLE MATERIALES (
MAT_ID D_MAT_ID,
MAT_COD VARCHAR(5),
MAT_NOM VARCHAR(15))

CREATE TABLE PARTES (
PRT_ID D_PRT_ID,
PRT_COD VARCHAR(5),
PRT_INGRESO_1 DECIMAL(10,2),
PRT_INGRESO_2 DECIMAL(10,2),
PRT_SALIDA DECIMAL(10,2))

CREATE TABLE PRT_ORD (
PRT_ID D_PRT_ID,
ORD_ID D_ORD_ID);





Como se daran cuentas una ORDEN puede tener varias PARTES anexadas asi como en un PARTE puede tener varias ORDENES (relacion muchos a muchos). Mi problema es que quisiera mostrar en un dbgrid esto:

ORD_COD, MAT_COD, MAT_NOM, SUM(PRT_INGRESO_1), SUM(PRT_INGRESO_2), SUM(PRT_SALIDA)

Es decir arrojar en un dbgrid el codigo de la orden y material, nombre del material y luego la suma de PRT_INGRESO_1, PRT_INGRESO_2, PRT_SALIDA datos que se encuentran almacenados en Partes y anexados en la tabla PRT_ORD
o dicho de otro modo ya q la orden tiene varias partes sumar los ingresos 1 y 2 y las salidas de estas partes y mostrarlas juntos con los datos de la orden (codigo orden, codigo material, ...)

hay alguna forma de meter eso en el Select de un TpFIBDataSet?, algo como:

Código SQL [-]
SELECT
ORD.ORD_ID,
ORD.ORD_COD,
MAT.MAT_COD,
MAT.MAT_NOM,
SUM(PRT.PRT_ING_1) INGRESO_1,
SUM(PRT.PRT_ING_2) INGRESO_2,
SUM(PRT.PRT_SAL) SALIDA
FROM
ORDENES ORD, MATERIALES MAT, PARTES PRT, PRT_ORD PO
WHERE
PRT.PRT_ID = PO.PRT_ID AND
ORD.ORD_ID = PO.ORD_ID AND
ORD.MAT_ID = MAT.MAT_ID





Talvez halla otra solucion para mostrarlo en el dbgrid, no lo se
Espero haberme hecho entender y gracias de antemano por alguna respuesta

Ivanzinho 30-05-2007 16:23:00

No se si he entendido bien tu problema, pero puedes probar a agregar a la consulta que tu propones la siguiente línea :
Código SQL [-]
Order by ORD.ORD_ID, ORD.ORD_COD, MAT.MAT_COD, MAT.MAT_NOM
con lo que los totales te saldrán agrupados por orden y material, que parece ser lo que buscas.

Un saúdo

VNyes 31-05-2007 19:14:21

si con aquello me salen los grupos ordenados por orden y material, pero me faltaria obtener la suma de ingresos y salidas de las partes q estan anexados a ese material, ese es mi problema, la solucion que propuse no sale con eso

fjcg02 01-06-2007 00:24:25

Prueba con
Código SQL [-]
SELECT 
ORD.ORD_ID,
ORD.ORD_COD,
MAT.MAT_COD,
MAT.MAT_NOM,
SUM(PRT.PRT_ING_1) INGRESO_1, 
SUM(PRT.PRT_ING_2) INGRESO_2,
SUM(PRT.PRT_SAL) SALIDA 
FROM
ORDENES ORD, MATERIALES MAT, PARTES PRT, PRT_ORD PO
WHERE
PRT.PRT_ID = PO.PRT_ID AND
ORD.ORD_ID = PO.ORD_ID AND
ORD.MAT_ID = MAT.MAT_ID
GROUP BY ORD.ORD_ID, ORD.ORD_COD, MAT.MAT_COD, MAT.MAT_NOM,

Suerte

Ivanzinho 01-06-2007 09:53:40

Cita:

Empezado por Ivanzinho
Código SQL [-]
Order by ORD.ORD_ID, ORD.ORD_COD, MAT.MAT_COD, MAT.MAT_NOM
con lo que los totales te saldrán agrupados por orden y material, que parece ser lo que buscas.

Un saúdo

Cita:

Empezado por VNyes
si con aquello me salen los grupos ordenados por orden y material, pero me faltaria obtener la suma de ingresos y salidas de las partes q estan anexados a ese material, ese es mi problema, la solucion que propuse no sale con eso

¿En que estaría pensando?:confused:, queria poner :
Código SQL [-]
Group by ORD.ORD_ID, ORD.ORD_COD, MAT.MAT_COD, MAT.MAT_NOM
:o:p

Un saúdo

VNyes 01-06-2007 19:32:10

Gracias Ariefez!!!!!!!!
 
gracias por las respuestas pero de esa forma ya lo habia pensado y no es lo que queria ya que no me arroja los valores deseados por tanto GROUP

Mas Gracias a mi sensei Ariefez que otra vez tuve que molestarlo para que me ayude en la respuesta la cual es:

Código SQL [-]
SELECT
SUMAS.ORD_ID,
ORDEN.ORD_COD,
MAT.MAT_COD,
MAT.MAT_NOM,
SUMAS.INGRESO_1,
SUMAS.INGRESO_2,
iNVL(SUMAS.INGRESO_1, 0) / iNVL(SUMAS.INGRESO_2, 0),
SUMAS.SALIDA
FROM
(SELECT
ORD.ORD_ID,
SUM(PRT.PRT_ING_1) INGRESO_1,
SUM(PRT.PRT_ING_2) INGRESO_2,
SUM(PRT.PRT_SAL) SALIDA
FROM
ORDENES ORD,
PARTES PRT, PRT_ORD PO
WHERE
PRT.PRT_ID = PO.PRT_ID AND
ord.ORD_ID = PO.ORD_ID
GROUP BY
ORD.ORD_ID) SUMAS,
MATERIALES MAT, ORDENES ORDEN
WHERE
MAT.MAT_ID = ( SELECT MAT_ID FROM ORDENES WHERE ORD_ID = SUMAS.ORD_ID) AND
ORDEN.ORD_ID = ( SELECT ORD_ID FROM ORDENES WHERE ORD_ID = SUMAS.ORD_ID)

Ps: no se por que lo anterior no se ve bonito si todo lo encierro en codigo sql y en la vista previa se ve como codigo sql pero a la hora que aparece en el foro ya se ve asi, ayuda? xD


La franja horaria es GMT +2. Ahora son las 14:59:52.

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