Fórum erro com group by #274621
30/03/2005
0
select l.datalanc, l.lote, l.linha, l.valor, l.conta_debito, l.conta_credito, l.complemento1,
(select p.conta from plano p where p.cod_emp=l.cod_emp and p.codigo=l.conta_debito) as debito,
(select p.conta from plano p where p.cod_emp=l.cod_emp and p.codigo=l.conta_credito) as credito
from ...
where ...
group by l.datalanc, l.lote, l.linha, l.valor, l.conta_debito, l.conta_credito, l.complemento1
Ocorre o seguinte erro:
Invalid expression in the select list (not contained in either an aggregate function or the group by clause)
Sei que se usasse uma função no subselect o group by estaria correto, mas como faço quando é um simples subselect?? :?:
Livia
Livia
Curtir tópico
+ 0Posts
30/03/2005
Ehvasc
Realmente, pra usar o group by tem que usar uma função agregada (SUM,AVG, etc). Não estou vendo onde vc pode usar uma função agregada no seu código. Tente usar DISTINCT ou uma função agregada em uma coluna que vc não utlize, só pra poder usar o GROUP BY.
Espero ter ajudado. Qualquer dúvida entre em contato.
Boa sorte e até a próxima
Gostei + 0
30/03/2005
Livia
Livia
Gostei + 0
30/03/2005
Faelcavalcanti
Gostei + 0
30/03/2005
Livia
Gostei + 0
31/03/2005
Faelcavalcanti
Olha só também estou com dúvidas em relação à como declarar a subquery, a partir de um group by, mas o maior problema é o [b:442ca7a8c5]union all[/b:442ca7a8c5]. Veja a minha gambiarra abaixo:
SELECT L.DATALANC, L.LOTE, L.LINHA, L.VALOR, L.CONTA_DEBITO, L.CONTA_CREDITO, L.COMPLEMENTO1, P.CONTA FROM LANCAMENTO L, PLANO P WHERE P.COD_EMP = L.COD_EMP OR P.CODIGO = L.CONTA_DEBITO OR P.CODIGO = L.CONTA_CREDITO AND L.SITUACAO = ´1´ AND L.DATALANC BETWEEN ´2004-12-01´ AND ´2004-12-01´ UNION ALL SELECT L.DATALANC, L.LOTE, L.LINHA, L.VALOR, L.CONTA_DEBITO, L.CONTA_CREDITO, L.COMPLEMENTO1, P.CONTA FROM LANCAMENTO L, PLANO P WHERE P.COD_EMP = L.COD_EMP OR P.CODIGO = L.CONTA_DEBITO OR P.CODIGO = L.CONTA_CREDITO AND L.SITUACAO = ´1´ AND L.DATALANC BETWEEN ´2004-12-01´ AND ´2004-12-01´ AND L.MES_ANO_BASE CONTAINING (SELECT MAX(Q.MES_ANO_BASE) FROM SALDOS Q WHERE Q.COD_EMP=1 AND Q.CONTA=8 AND Q.MES_ANO_BASE BETWEEN ´200-01-01´ AND ´2004-11-01´ AND ((L.CONTA_CREDITO NOT IN (SELECT DISTINCT (CONTA)) FROM SALDOS WHERE COD_EMP=1 AND MES_ANO_BASE=´2004-12-01´)))
O que ficou faltando eu colocar foi o [b:442ca7a8c5]group by[/b:442ca7a8c5], não foi por preguiça não, foi por incerteza de como ficaria com o [b:442ca7a8c5]union[/b:442ca7a8c5]. Mas tipow, minha idéia era acabar com os subselects, que tinham acima depois associá-los ao group by, neste caso ficou faltando o último. Mas pelo mínimo que tentei espero ter te ajudado!!! Seria bom se existisse um hibernate para o delphi nestas horas! :roll:
:wink:
Falow!
Gostei + 0
04/04/2005
Livia
select l.mes_ano_base, l.datalanc, l.lote, l.linha, l.valor, l.conta_debito, l.conta_credito, l.complemento1, p.conta as debito, p2.conta as credito from lancamento l left outer join plano p on (p.cod_emp=l.cod_emp and p.codigo=l.conta_debito) left outer join plano p2 on (p2.cod_emp=l.cod_emp and p2.codigo=l.conta_credito) where l.cod_emp=:cod_emp and (l.conta_credito=:codigo or l.conta_debito=:codigo) and l.situacao=´1´ and l.datalanc between :inicial and :final group by l.mes_ano_base, l.datalanc, l.lote, l.linha, l.valor, l.conta_debito, l.conta_credito, l.complemento1, p.conta, p2.conta union all select l.mes_ano_base, l.datalanc, l.lote, l.linha, l.valor, l.conta_debito, l.conta_credito, l.complemento1, p.conta as debito, p2.conta as credito from lancamento l left outer join plano p on (p.cod_emp=l.cod_emp and p.codigo=l.conta_debito) left outer join plano p2 on (p2.cod_emp=l.cod_emp and p2.codigo=l.conta_credito) where l.cod_emp=:cod_emp and (l.conta_credito=:codigo or l.conta_debito=:codigo) and l.mes_ano_base containing(select max(q.mes_ano_base) from saldos q where q.cod_emp=:cod_emp and q.conta=:codigo and q.mes_ano_base between :inicial2 and :final2) and ((l.conta_credito not in (select distinct(conta) from saldos where cod_emp=:cod_emp and mes_ano_base=:data_base)) or (l.conta_debito not in (select distinct(conta) from saldos where cod_emp=:cod_emp and mes_ano_base=:data_base))) group by l.mes_ano_base, l.datalanc, l.lote, l.linha, l.valor, l.conta_debito, l.conta_credito, l.complemento1, p.conta, p2.conta order by 2,3,4
Vlw!
Livia
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)