ayuda con consulta sql

19/09/2006 - 16:46 por DarthSidious | Informe spam
buenos dias, me estoy rompiendo la cabeza con una consulta que no me sale, el
problema es asi:

tengo 2 tablas, tablaFuente y tablaControl. En ambas tengo operaciones y
necesito agruparlas por sucursal y por fecha, para que me muestre:

ImporteTotal en tablaFuente, ImporteTotal en tablaControl, FechaDeOperacion,
Diferencia entre importe de ambas tablas.

El problema es que la cantidad de operaciones en ambas tablas no tiene que
ser igual, quiza en TablaFuente tengo 10 operaciones que equivalen solo a 2
operaciones de TablaControl (todas las operaciones en ambas tablas llevan
misma sucursal y fecha). Lo que me falla es que, si tengo 10 operaciones en
tablaFuente, y 2 en tablaControl, cuando hago la suma de los importes
(agrupado por sucursal y fecha) me muestra bien el importe de TablaFuente
pero de tablaControl me suma el Importe X veces como sume en tablaFuente, no
se si se entiende

ejemplo tablaControl= sucursal = 1 - Fecha: hoy - importe 10
sucursal = 1 - Fecha: hoy - importe 20

tablaFuente = sucursal = 1 - Fecha: hoy - importe 10
sucursal = 1 - Fecha: hoy - importe 10
sucursal = 1 - Fecha: hoy - importe 10

entonces en el resultado el importe de TablaFuente es 30, pero el importe de
TablaControl es (10+20*3) = 90

o sea, la suma en la segunda tabla la hace X veces con X = cantidad de
registros en tablaFuente.

Espero haber sido claro.. quiza es un poco embrollado.

Desde ya gracias a quien se tome por lo menos el tiempo de leer esto.

:-)
 

Leer las respuestas

#1 Alejandro Mesa
19/09/2006 - 17:06 | Informe spam
DarthSidious,

Cuando se postea este tipo de problemas, es muy conveniente que se postee la
estructura de las tablas involucrads, incluyendo indices y restricciones.
Tambien es de mucha ayuda que se adjunten datos de ejemplo y resultados
esperados.

Al parecer estas usando una union del tipo "inner join" por [sucursal] y
[fecha], lo que hace que cada fila de la tabla [tablaFuente] mache con las
dos filas de la tabla [tablaControl]. Preferible que calcules la agrupacion
por separado y que unas el resultado. Puedes usar tablas derivadas para
lograr lo anterior.

select
coalesce(t1.sucursal, t2.sucursal) as sucursal,
coalesce(t1.fecha, t2.fecha) as fecha,
t1.sum_importe as fuente_sum_importe,
t2.sum_importe as control_sum_importe,
(isnull(t1.sum_importe, 0) - isnull(t2.sum_importe, 0)) as diferencia
from
(
select sucursal, fecha, sum(importe) as sum_importe
from dbo.tablaFuente
group by sucursal, fecha
) as t1
full outer join
(
select sucursal, fecha, sum(importe) as sum_importe
from dbo.tablaControl
group by sucursal, fecha
) as t2
on t1.sucursal = t2.sucursal and t1.fecha = t2.fecha
go

Uso una union tipo "full outer join" para tener en cuenta las filas que
existen en una tabla y que no existen en la otra.


AMB

"DarthSidious" wrote:

buenos dias, me estoy rompiendo la cabeza con una consulta que no me sale, el
problema es asi:

tengo 2 tablas, tablaFuente y tablaControl. En ambas tengo operaciones y
necesito agruparlas por sucursal y por fecha, para que me muestre:

ImporteTotal en tablaFuente, ImporteTotal en tablaControl, FechaDeOperacion,
Diferencia entre importe de ambas tablas.

El problema es que la cantidad de operaciones en ambas tablas no tiene que
ser igual, quiza en TablaFuente tengo 10 operaciones que equivalen solo a 2
operaciones de TablaControl (todas las operaciones en ambas tablas llevan
misma sucursal y fecha). Lo que me falla es que, si tengo 10 operaciones en
tablaFuente, y 2 en tablaControl, cuando hago la suma de los importes
(agrupado por sucursal y fecha) me muestra bien el importe de TablaFuente
pero de tablaControl me suma el Importe X veces como sume en tablaFuente, no
se si se entiende

ejemplo tablaControl= sucursal = 1 - Fecha: hoy - importe 10
sucursal = 1 - Fecha: hoy - importe 20

tablaFuente = sucursal = 1 - Fecha: hoy - importe 10
sucursal = 1 - Fecha: hoy - importe 10
sucursal = 1 - Fecha: hoy - importe 10

entonces en el resultado el importe de TablaFuente es 30, pero el importe de
TablaControl es (10+20*3) = 90

o sea, la suma en la segunda tabla la hace X veces con X = cantidad de
registros en tablaFuente.

Espero haber sido claro.. quiza es un poco embrollado.

Desde ya gracias a quien se tome por lo menos el tiempo de leer esto.

:-)



Preguntas similares