query com agrupamentos por faixa

17/03/2016

1

Amigos bom dia.

Estou precisando da ajuda de vocês para uma query com agrupamentos por faixa. São 3 tabelas que não tenho como mexer na estrutura:

Tabela Faixas (tem as faixas de valores em que vou totalizar valores separadas por ano)

idfx (integer)
ano (integer)
fxIn (numeric,10,2)
fxFim (numeric,10,2)

x-x-x-x-x-x-x-x-x-x-x-x

Tabela Valores (tem os valores que preciso totalizar separadas por ano)

idVlr (integer)
idLancto (integer)
ano (integer)
vlrBase (numeric,10,2)
vlrAcrescimo(numeric,10,2)
vlrDespesa1 (numeric,10,2)
vlrDespesa2 (numeric,10,2)
vlrICMS (numeric,10,2)

x-x-x-x-x-x-x-x-x-x-x-x

Tabela Lanctos (tem as lançamento que serão processados)
(não coloquei os campos que não são importantes)

idLancto (integer)
idVlr (integer)
dtLancto (date)
ano (integer)
vlrLancto (numeric,7,2)

x-x-x-x-x-x-x-x-x-x-x-x
Estou usando a seguinte query:

select f.fxIn, f.fxFim, count(L.idLancto) as QTD,
sum(v.vlrBase) as vlrBase,
sum(v.vlrAcrescimo) as vlrAcrescimo,
sum(v.vlrDespesa1) as vlrDespesa1,
sum(v.vlrDespesa2) as vlrDespesa2,
case
when (L.dtLancto >= :dICMS) then Sum(V.vlrICMS)
else 0
end as vlrICMS
from Faixas F
left outer join Lanctos L
on ((L.dtLancto between :DIN and :DFIM) and (L.vlrLancto between f.fxIn and f.fxFim))
left outer join Valores V
on ((L.idVlr = V.idVlr) and (V.ano = :IANO))
where (P.ANO = :IANO)
group by f.fxIn, f.fxFim, L.dtLancto
order by f.fxIn, f.fxFim

Preciso agrupar apenas por f.fxIn, f.fxFim e não com L.dtLancto, só que se eu não colocar a data não
sai o resultado correto. obrigado
Responder

Posts

17/03/2016

Novorj

Ninguém?????
Responder

17/03/2016

Rafael Bosco

Brother, você está usando o COUNT no campo L.dtLancto, por regra, é necessário ele estar no Group By.... logo, ele sempre estará agrupado.
Responder

17/03/2016

Novorj

Boa tarde Rafael.

Acho que não viu direito, mas, eu não uso o count, estou usando um Sum(V.vlrICMS), e justamente este problema que estou tentando solucionar e gostaria de uma ajuda. Não posso ter quebra por data, somente por f.fxIn e f.fxFim. Obrigado
Responder

18/03/2016

Novorj

Ninguem para ajudar?
Responder

28/03/2016

Rafael Bosco

select f.fxIn, f.fxFim, count(L.idLancto) as QTD,


Olha aí a sua Query cara, ta usando COUNT sim!
Responder