PDA

Ver la Versión Completa : sumar columnas en un dbgrid y mostrar mas campos


VNyes
30-05-2007, 11:18:17
buenas a todos los que lean y puedan darme una mano en esto:
Tengo las sgtes tablas:

Código SQL [-] (http://www.clubdelphi.com/foros/#)
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 [-] (http://www.clubdelphi.com/foros/#)
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 :
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

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
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


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 :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 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 [-] (http://www.clubdelphi.com/foros/#)
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