PDA

Ver la Versión Completa : Filas agrupadas por suma


Ulises
04-10-2003, 08:39:13
Hola muchachos,

Quizas alguien ya ha efectuado lo que me aproblema; en una tabla tengo varios registros de la siguiente manera:

D,FA ,100,xxx,100
D,FA ,345,ccc, 200
H,FA ,100,yyy,050
H,FA ,100,yyy,050
D,CH,555,xxx,100

tengo que llegar a este resultado:

D,FA ,345,ccc,200
D,CH,555,xxx,100

o sea exclui la fila 1, 3 y 4 pues son iguales en la columna 2 y 3 y ademas la suma de la columna 5, cuando la columna 1 es 'D' es igual a la suma de la columna 5 cuando la columna 1 es 'H'.

Espero haberme explicado bien.

Gracias de antemano.

Ulises

javiermorales
04-10-2003, 11:38:13
Hola estoy probando tu problema y me falta que comentes, ¿porqué aparece la columna D,CH,555,xxx,100?, ¿cual es la clave primaria?.

javiermorales
04-10-2003, 12:05:28
Bueno he continuado suponiendo que la clave de unión para la restricción de las sumas es la columna 2 y 3. Te comento, tienes varias restricciones, lo primero es calcular la suma de las columnas 5:

SELECT c1, c2, c3, c4, Sum(c5) AS Suma5
FROM tabla
GROUP BY c1,c2,c3,c4;

A esta consulta la llamaremos tablasum
Lo siguiente es obtener las que deben omitirse por cumplir con la restricción de las sumas:

SELECT A.*
FROM tablasum AS A INNER JOIN tablasum B AS B
ON (A.c3 = B.c3) AND (A.c2 = B.c2) AND
(A.Suma5 = B.Suma5)
WHERE (((A.c1)="D") AND ((B.c1)="H"))

A esta otra la llamaremos nosalir
Una vez que tenemos este dato, debemos obtener de la tabla inicial, las que no aparecen en esta consulta

SELECT tabla.*
FROM tabla LEFT JOIN nosalir ON (tabla.c5 = nosalir.Suma5)
AND (tabla.c4 = nosalir.c4) AND (tabla.c3 = nosalir.c3) AND
(tabla.c2 = nosalir.c2) AND (tabla.c1 = nosalir.c1)
WHERE (((tabla.c1)="D") AND ((nosalir.c1) Is Null));

Solo saco las D, por que supongo que es lo que quieres, si no es así coméntalo. Las tablas intermedias puedes tener en procedimientos almacenados o en la propia base de datos dependiendo del motor que utilices.Espero que te sirva, un saludo.

Ulises
06-10-2003, 19:27:46
Javier, gracias por responder, en realidad ando fuera de Chile y no habia podido comunicarme a Internet..

Respondiendo a tu pregunta, la clave primaria son otros campos que no los puse en el ejemplo, corresponden a Numero de Empresa, Numero de Comprobante, Tipo de Comprobante, Fecha de Comprobante y Linea de Detalle:

Ej,

04, 1000, 4, 10-10-2003, 1
04, 1000, 4, 10-10-2003, 2
04, 1000, 4, 10-10-2003, 3
04, 1001, 4, 11-10-2003, 1
04, 1001, 4, 11-10-2003, 2


Es dentro de cada uno de estos registros que esta la información mostrada con anterioridad.

De todas maneras probaré más tarde tus consejos.

Gracias de nuevo.

Ulises