[firebase-br] Erro de agregação em SQL

Carlos H. Cantu listas em warmboot.com.br
Ter Dez 16 11:53:55 -03 2014


Acredito que vc vai ter que colocar o subselect do having na lista de
campos do select. As versões mais antigas do Firebird tinha um bug que
permitia agregar por valor que não faziam parte do select, mas que
poderia ocasionar resultados inconsistentes.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

FA> Bom dia a todos

FA> Seguinte estou com um problema de agregação em uma SQL que funcionava no
FA> firebird 1.0 e no firebird 1.5 não funciona da erro de agregação.
FA> A SQL é a seguinte:

FA> select
FA>     p.cod_produto,
FA>     p.descricao descricao_produto,
FA>     p.cod_grupo,
FA>     g.descricao descricao_grupo,
FA>     pg.cod_grade,
FA>     pg.cod_barra,
FA>     pg.referencia,
FA>     pg.PRECO_CUSTO_REAL,
FA>     pg.PRECO_RECOLOCACAO,
FA>     pg.preco_vista,
FA>     pg.preco_prazo,
FA>     p.unidade,
FA>     pg.ESTOQUE_MIN,
FA>     ie.icms_cst,
FA>     sum(ps.estoque_fisico) xEstoque
FA> from produtos p
FA> inner join grupos_produto g on
FA>     (p.cod_grupo = g.cod_grupo)
FA> inner join produtos_grade pg on
FA>     (p.cod_produto = pg.cod_produto)
FA> inner join produtos_saldos ps on
FA>     (pg.cod_produto = ps.cod_produto and
FA>      pg.cod_grade = ps.cod_grade)
FA> inner join impostos_empresas ie on
FA>     (p.cod_imposto = ie.cod_imposto)
FA> where
FA>     (p.baixa_estoque = 1) and
FA>     (ps.codigo_empresa in (1)) and
FA>     (ie.codigo_empresa = 1)
FA> group by
FA>     p.cod_produto,
FA>     p.descricao,
FA>     p.cod_grupo,
FA>     g.descricao,
FA>     pg.cod_grade,
FA>     pg.cod_barra,
FA>     pg.referencia,
FA>     pg.PRECO_CUSTO_REAL,
FA>     pg.PRECO_RECOLOCACAO,
FA>     pg.preco_vista ,
FA>     pg.preco_prazo ,
FA>     p.unidade,
FA>     pg.estoque_min,
FA>     ie.icms_cst

FA> having
FA>     (select
FA>        count(*)
FA>      from
FA>        produtos_ind pi
FA>      where ((pi.cod_pro_ind   = pg.cod_produto) and
FA>             (pi.cod_grade_ind = pg.cod_grade  ))) = 0

FA> order by
FA>     p.cod_produto,
FA>     pg.cod_grade

FA> o erro retornado é o seguinte :

FA> Invalid token.
FA> Dynamic SQL Error.
FA> SQL error code = -104.
FA> Invalid expression in the HAVING clause (neither an aggregate function
FA> nor a part of the GROUP BY clause).

FA> Se for retirado o HAVING  funciona normalmente, mas não traz o resultado
FA> desejado. Alguém saberia me dizer como posso modificar a SQL para trazer
FA> o resultado desejado?


FA> ______________________________________________
FA> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
FA> Para saber como gerenciar/excluir seu cadastro na lista, use:
FA> http://www.firebase.com.br/fb/artigo.php?id=1107
FA> Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista