![]() |
consultas anidadas: group by dentro otro group by
Tengo una consulta con dos consultas encadenadas con un UNION, y cada SELECT tiene la clausula GROUP BY...
Hasta aquí todo bien, el problema es que en el resultado obtengo un registro repetido (por que existe en dos tablas diferentes) lo que deseo es que estos dos registros sean sumados, usando SUM() pero para hacer esto tengo que anidar la consulta en otra que tambien debe tener un GROUP BY, pero siempre obtengo un mensaje de error, estoy algo perdido y no se de que otra manera hacer la consulta. RDBMS: Interbase 6.5 Gracias a todos por cualquier sugerencia o ayuda que pudiesen facilitarme. |
Me disculpan la pesima explicación, la replanteo de otra manera: Esta es la consulta que tengo y deseo corregir:
[
Esta consulta me genera el siguiente resultado: Código:
COD_CTA EST_FNZ TOTAL_BS Asumo que debo usar una subconsulta, pero no puedo colocar dos consultas enlazadas con UNION como subconsulta de otra... Muchas gracias a todos |
Has probado a ver si haciendo una vista con esta consulta, luego te deja lanzar otra consulta sobre ésta obteniendo los resultados que buscas.?
Un Saludo. |
Hoy estuve leyendo un poco sobre el tema de las vistas en el libro de Navathe/Elsmari, pero regrese a las consultas casi convencido de que se podía con una subconsulta, pero lo veo imposible porque necesito traer el resultado de dos SUM() de la consulta interna hacia la consulta externa, si se puede puede con una consulta, pues bien, si no, probare con una vista...
Si tienes algun ejemplo que me sirva de orientación te lo agradecería ... Muchas gracias por tu respuesta ... |
3 uniones
Se me ocurre que podria ser de la siguiente manera:
SELECT M1.cod_cta, M1.est_fnz, SUM(M1.total_bs) AS total_bs FROM cbpmov01 M1 WHERE M1.est_fnz = '6160' AND M1.tipo NOT IN ('NC', 'ND') AND NOT EXISTS (Select M02.cod_cta from cbpmov02 M02 Where M02.cod_cta = M1.cod_cta and M02.est_fnz = M1.est_fnz) GROUP BY M1.cod_cta, M1.est_fnz UNION SELECT M2.cod_cta, M2.est_fnz, SUM(M2.total_bs) AS total_bs FROM cbpmov02 M2 WHERE M2.est_fnz = '6160' AND NOT EXISTS (Select M01.cod_cta from cbpmov01 M01 Where M01.cod_cta = M2.cod_cta and M01.est_fnz = M2.est_fnz) GROUP BY M2.cod_cta, M2.est_fnz UNION SELECT M1.cod_cta, M1.est_fnz, SUM(M1.total_bs + M2.total_bs) AS total_bs FROM cbpmov01 M1, cbpmov02 M2 WHERE M1.est_fnz = '6160' and M1.cod_cta = M2.cod_cta and M1.est_fnz = M2.est_fnz GROUP BY M2.cod_cta, M2.est_fnz Te explico: El primer select te va a traer todas las cuentas que estan unicamente en la tabla cbpmov01, el segundo select te va a traer solo las cuentas que estan en la tabla cbpmov02 y el tercer select te va a traer las cuentas que estan en ambas tablas agrupadas por cuenta y estado financiero (yo asumi que ambas son clave primarias, pero si no es asi, quedaria mas simple todavia). |
Hola Luciano,
Ya había pensado en tu solución pero no recuerdo si la implementé o no... de cualquier manera la probe y me devuelve el siguiente error en IBOConcole: Código:
ISC ERROR CODE:335544569
Luego uso la vista totalctabco desde otro SELECT:
Con este SELECT obtengo el resultado que estaba buscando: Código:
COD_CTA EST_FNZ TOTAL_BS De cualquier manera prefiero hacerlo sin vistas, si llego a cometer algún error en la vista, debo modificarla para luego ejecutar nuevamente un SELECT... Otros dos grandes problemas: 1. No puedo colocar dentro de una vista un FROM hacia una tabla vacía, InterBase 6.5 cierra la conexión con la base de datos. 2. No como pasarle parametros a una vista desde Delphi (si alguien lo ha hecho, por favor me ilumine). Gracias por sus sugerencias ... |
Si, es verdad, el error esta en el Group By de la ultima union, fijate que escribi mal los alias, deberian ser M1 en vez de M2
Como vos decis, es preferible hacer la consulta sin una vista como paso intermedio... Pero bueno, si yo lo implementaste asi esta bien... Saludos Luciano |
Ok Luciano, hice el cambio en el alias del GROUP BY y realizó la suma, pero el resultado del SUM no es el correcto, al menos para el último registro: esto es lo que obtengo en total_bs: -21.254.582,52
Tendría que revisarlo con mas detalle, no se cual será el problema... |
La franja horaria es GMT +2. Ahora son las 08:32:27. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi