Como faço para Comparar campos de tabelas diferentes usando HAVING
21/07/2021
0
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
SELECT sum((vlrunit*qtdade)+VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-valdesconto+valacrescimo)soma,
d.numero,
vlrnota
FROM MOVIMENTACAO m
left join documentos d
on m.iddoc = d.iddoc
Group by vlrnota
HAVING VLRNOTA = (SELECT sum((vlrunit*qtdade)+VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-valdesconto+valacrescimo) AS SOMA FROM MOVIMENTACAO)
Lucas Langaro
Post mais votado
21/07/2021
SELECT d.numero, d.vlrnota, sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo soma FROM documentos d left join MOVIMENTACAO m on m.iddoc = d.iddoc Group by d.numero, d.vlrnota, d.VLRICMSUBSTITUICAO, d.vlripi, d.vlriss, d.valdesconto, d.valacrescimo Having d.vlrnota <> sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo
Emerson Nascimento
Mais Posts
21/07/2021
Lucas Langaro
SELECT d.numero, d.vlrnota, sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo soma FROM documentos d left join MOVIMENTACAO m on m.iddoc = d.iddoc Group by d.numero, d.vlrnota, d.VLRICMSUBSTITUICAO, d.vlripi, d.vlriss, d.valdesconto, d.valacrescimo Having d.vlrnota <> sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo
Rodei o script e nao apresentou nenhuma mensagem de erro.
Porém mesmo colocando "<>" ali no having, o select está trazendo tanto valores iguais como valores diferentes, conforme exemplo abaixo:
|Numero |VLRNOTA |SOMA |
| 1 | 188 | 181 |
| 5 | 74,3 | 74,3 |
| 9 | 321,60 | 321,60 |
21/07/2021
Emerson Nascimento
tente arredondar.
SELECT d.numero, d.vlrnota, sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo soma FROM documentos d left join MOVIMENTACAO m on m.iddoc = d.iddoc Group by d.numero, d.vlrnota, d.VLRICMSUBSTITUICAO, d.vlripi, d.vlriss, d.valdesconto, d.valacrescimo Having round(d.vlrnota,2) <> round(sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo,2)
21/07/2021
Lucas Langaro
tente arredondar.
SELECT d.numero, d.vlrnota, sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo soma FROM documentos d left join MOVIMENTACAO m on m.iddoc = d.iddoc Group by d.numero, d.vlrnota, d.VLRICMSUBSTITUICAO, d.vlripi, d.vlriss, d.valdesconto, d.valacrescimo Having round(d.vlrnota,2) <> round(sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo,2)
Fiz conforme está descrito, mas mesmo arredondando os valores continua retornando valores iguais.
Tentei fazer usando CASE, mas também não consegui fazer funcionar
21/07/2021
Emerson Nascimento
SELECT d.numero, d.vlrnota, sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo soma FROM documentos d left join MOVIMENTACAO m on m.iddoc = d.iddoc Group by d.numero, d.vlrnota, d.VLRICMSUBSTITUICAO, d.vlripi, d.vlriss, d.valdesconto, d.valacrescimo Having cast(d.vlrnota as numeric(12,2)) <> cast((sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo) as numeric(12,2))
21/07/2021
Lucas Langaro
SELECT d.numero, d.vlrnota, sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo soma FROM documentos d left join MOVIMENTACAO m on m.iddoc = d.iddoc Group by d.numero, d.vlrnota, d.VLRICMSUBSTITUICAO, d.vlripi, d.vlriss, d.valdesconto, d.valacrescimo Having cast(d.vlrnota as numeric(12,2)) <> cast((sum(m.vlrunit*m.qtdade)+d.VLRICMSUBSTITUICAO+d.vlripi+d.vlriss-d.valdesconto+d.valacrescimo) as numeric(12,2))
Eu estava colocando o "Cast" no "Select" e não no "Having".
Fazendo desse jeito que você mencionou, funcionou corretamente.
Muito obrigado pela ajuda.
Clique aqui para fazer login e interagir na Comunidade :)