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
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
Curtir tópico
+ 0
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.
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
Clique aqui para fazer login e interagir na Comunidade :)