Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Duda con una consulta + subconsulta

Estas en el tema de Duda con una consulta + subconsulta en el foro de Bases de Datos General en Foros del Web. Tengo esta consulta: Cita: SELECT A.Subcuenta, SUM(A.Debe) as Debe, SUM(A.Haber) as Haber FROM A, As WHERE A.Subcuenta IN ( SELECT DISTINCT A.Subcuenta FROM A, As ...
  #1 (permalink)  
Antiguo 24/02/2004, 12:32
 
Fecha de Ingreso: octubre-2003
Mensajes: 4
Antigüedad: 20 años, 6 meses
Puntos: 0
Pregunta Duda con una consulta + subconsulta

Tengo esta consulta:

Cita:
SELECT A.Subcuenta, SUM(A.Debe) as Debe, SUM(A.Haber) as Haber
FROM A, As
WHERE A.Subcuenta IN
(
SELECT DISTINCT A.Subcuenta
FROM A, As
WHERE
(A.Subcuenta BETWEEN 10000000 AND 20000000)
AND (A.Asiento = As.Asiento AND A.Ejercicio = A.Ejercicio)
AND (A.Fecha BETWEEN '01/06/2000' AND '31/12/2000')
)
AND (A.Ejercicio = 1)
AND (A.Fecha < '01/06/2000')
AND (A.Fecha BETWEEN '01/06/2000' AND '31/12/2000')
GROUP BY A.Subcuenta
La subconsulta que tengo entre los 2 parentesis que estan solos, devuelve una serie de subcuentas que estan entre unas fechas determinadas. Lo que yo quiero es obtener la suma de 2 campos de la tabla A (asientos) para todas las subcuentas que haya devuelto la subconsulta.

Mi problema es que puede que haya subcuentas que no tengan asientos anteriores a esa fecha. En vez de dar un error, se cuelga la consulta porque intenta hacer la suma de los campos DEBE y HABER de los asientos pertenecientes a la subcuenta, pero no tiene asientos antes de esa fecha.

Como lo soluciono??
Podria añadir IS NOT NULL en el primer SELECT??

Alguna sugerencia?
  #2 (permalink)  
Antiguo 25/02/2004, 03:14
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Parece que deberías vincular las tablas A y AS también para la consulta principal, igual que haces en la subconsulta.

Otra sugerencia, puede que sea mejor hacer un inner join, que poner la condición en el WHERE, algo así:

SELECT A.Subcuenta, SUM(A.Debe) as Debe, SUM(A.Haber) as Haber
FROM A INNER JOIN As ON A.Asiento = As.Asiento AND A.Ejercicio = AS.Ejercicio
WHERE A.Subcuenta IN
(
SELECT DISTINCT A.Subcuenta
FROM A INNER JOIN As ON A.Asiento = As.Asiento AND A.Ejercicio = AS.Ejercicio
WHERE
(A.Subcuenta BETWEEN 10000000 AND 20000000)
AND (A.Fecha BETWEEN '01/06/2000' AND '31/12/2000')
)
AND (A.Ejercicio = 1)
AND (A.Fecha < '01/06/2000')
AND (A.Fecha BETWEEN '01/06/2000' AND '31/12/2000')
GROUP BY A.Subcuenta

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:24.