SQL error Erro comando Having

03/12/2015

0

Boa tarde Prezados,

Tenho o comando abaixo apresentando o erro "Cannot use an aggregate function in a WHERE clause, use HAVING instead", neste comando, preciso criar um filtro entre a "DATPRO2" e o maior valor de odxfun "MAX(ORDXFUN)", porém, não sei como utilizar o comando Having na minha consulta.


SELECT ORDSERV.TAG, ORDSERV.DATPRO2, MAX(ORDXFUN.DATHORFIM)
FROM ORDXFUN
LEFT OUTER JOIN ORDSERV ON ORDXFUN.CODEMP=ORDSERV.CODEMP AND ORDXFUN.CODORD=ORDSERV.CODORD

WHERE CASE WHEN MAX(ORDXFUN.DATHORFIM) IS NULL
THEN DATPRO2
ELSE MAX(ORDXFUN.DATHORFIM) END BETWEEN :DATA_INICIAL AND :DATA_FINAL

GROUP BY ORDSERV.TAG, ORDSERV.DATPRO2
ORDER BY 1
João Cristo

João Cristo

Responder

Posts

03/12/2015

Marcos P

Sempre que postar código no fórum use a tag "Inserir Codigo" !

Você não pode usar HAVING dentro do WHERE, pois eles são a mesma coisa... com escopos diferentes !

Explico melhor, o HAVING é o comando que você usa para filtrar valores a partir de funções de agregação.

Como você colocou o MAX(), deve tirá-lo do corpo do WHERE e adaptá-lo ao HAVING...

Repare que WHERE e HAVING podem coexistir na mesma query. O WHERE para as condições unitárias e o HAVING para as condições agregadas.

Faça o seguinte... ajuste sua query para listar TODOS os registros que você precisa, ou seja... todos os MAX().

Depois, retorne seu código que eu lhe ajudo com o filtro.

Ok ?!?


P.S.: responder posts anteriores, no sentido de encerrá-los, é uma boa prática para você conseguir ajuda por aqui.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar