Hola gise1985:
Tengo que hacerte algunas observaciones antes que nada sobre la forma en que estás haciendo las consultas.
Primero, cuanto tengas necesidad de unir dos o más tablas UTILIZA LA CLÁUSULA JOIN, INNER JOIN, LEFT JOIN O RIGTH JOIN según sea el caso en lugar de hacer la unión explícita en el WHERE:
Código:
select campo from Tabla1 INNER JOIN Tabla2 ON Tabla1.id = Tabla2.id
En lugar de esto
Código:
select campo from Tabla1, Tabla2 where Tabla1.id = Tabla2.id
Aunque el resultado es el mismo el performance de la consulta varia muchísimo, además la consulta es más legible, si tienes duda sobre el uso del JOIN pregúntale a Santa Wikipedia o a San Google.
Segundo, en el listado de tus tablas mencionas una llamada Editoriales( cod_editorial , nombre_editorial ), pero en la consulta que das de ejemplo nunca la utilizas, es posible que te falte definir alguna relación entre las tablas, por lo que te sugiero que revises esto.
Ahora bien, con respecto a tu problema, la solución más fácil sería simplemente que hagas una subconsulta sobre lo que tienes hecho y agrupes nuevamente, es decir algo como esto:
Código SQL:
Ver originalSELECT T1.id_fotografo, SUM(total) FROM
(
SELECT DISTINCT f.id_fotografo,SUM(r.precio_reportaje) AS total
FROM fotografos f, reportajes r, comprar c
WHERE (f.id_fotografo = r.id_fotografo) AND
(r.cod_reportaje = c.cod_reportaje) AND
(r.fecha_realizacion BETWEEN '01-nov-10' AND '30-nov-10')
GROUP BY f.id_fotografo
UNION
SELECT DISTINCT f.id_fotografo, SUM(e.precio_exclusiva) AS total
FROM fotografos f, exclusivas e, solicitar s
WHERE (f.id_fotografo = s.id_fotografo) AND
(s.cod_exclusiva = e.cod_exclusiva) AND
(e.fecha_entrega BETWEEN '01-nov-10' AND '30-nov-10')
GROUP BY f.id_fotografo)
) T1
GROUP BY T1.id_fotografo;
Esto debería ser suficiente, sin embargo la consulta no es para nada óptima.
Otra manera de poder hacerlo sería mas o menos así:
Código SQL:
Ver originalSELECT
f.id_fotografo,
f.nombre_fotografo,
SUM(nvl(r.precio_reportaje, 0) + nvl(e.precio_exclusiva, 0))
FROM fotografos f
LEFT JOIN reportajes r ON f.id_fotografo = r.id_fotografo
LEFT JOIN comprar c ON r.cod_reportaje = c.cod_reportaje
LEFT JOIN solicitar s ON f.id_fotografo = s.id_fotografo
LEFT JOIN exclusivas e ON s.cod_exclusiva = e.cod_exclusiva
WHERE
r.fecha_realizacion BETWEEN '01-nov-10' AND '30-nov-10'
GROUP BY f.id_fotografo, f.nombre_fotografo
En estos momentos no tengo modo de probar la consulta, pero creo que debería de funcionar bastante bien, como vez aquí las uniones se hacen utilizando JOIN (LEFT JOIN en este caso) solo hay que tener cuidado con el manejo de las fechas.
Haz la prueba y nos comentas los resultados.
Saludos.
Leo.