El 07/10/14 a las 10:55, Felipe Araoz Ramos escibió: > > Buen dia amigos del foro. > > Tengo una funcion que hace varios agrupaciones para un balance de > comprobacion, una para los saldos iniciales, para los movimientos, etc > y los voy uniendo con union all. Mi problema radica cuando quiero > agrupar por un campo extrayendo los 2,3 o 4, digitos iniciales de la > cuenta, segun el parametro $4. He estado haciendo esto: > > SELECT > substring(fpcdet.m_ccta,1,$4) as m_ccta, > SUM(CASE WHEN fpcdet.M_ACCI='D' THEN fpcdet.M_IMPN ELSE 0.00 END) AS > SI_DEBE, > SUM(CASE WHEN fpcdet.M_ACCI='H' THEN fpcdet.M_IMPN ELSE 0.00 END) AS > SI_HABE, > 0.00 AS MV_DEBE,0.00 AS MV_HABE,0.00 AS SA_DEBE,0.00 AS SA_HABE > FROM > fpcdet inner join fpccab on > fpcdet.m_empr=fpccab.m_empr and > fpcdet.m_anop=fpccab.m_anop and > fpcdet.m_mesp=fpccab.m_mesp and > fpcdet.m_grup=fpccab.m_grup and > fpcdet.m_ncom=fpccab.m_ncom > where fpcdet.m_empr=$1 and fpcdet.M_anop=$2 and fpcdet.M_MESP<$3 and > fpccab.m_cont='S' > GROUP BY fpcdet.m_ccta Con esto no me funciona bien, > pero si le coloco > GROUP BY 1 , me funciona bien, pero no se si es lo mas correcto O > seria mas conveniente; > GROUP BY substring(fpcdet.m_ccta,1,$4). >
No soy amigo de utilizar funciones que se ejecuten por cada fila. Yo dejaría el GROUP BY m_ccta . Aún así te aconsejo que hagas el EXPLAIN ANALYZE de cada consulta y analices el comportamiento con tus datos. Si vas a compartir los explain usa: explain.depesz.com -- -- Emanuel Calvo http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda