› Fóruns › SQL e PL/SQL › Pegar Coluna e somar Mes a Mes é possivel? › Pegar Coluna e somar Mes a Mes é possivel?
Consegui da seguinte forma:
Select
C.Codconta As CODCONTAS
, C.Descricao As DESCRICAO
, S.Valor AS VALOR_ANT
, Sum(case when To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor JANEIRO
, Sum(case when To_Char(L.Data, 'mm') = '02' or To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor FEVEREIRO
, Sum(case when To_Char(L.Data, 'mm') = '03' or To_Char(L.Data, 'mm') = '02' or To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor MARCO
, Sum(case when To_Char(L.Data, 'mm') = '04' or To_Char(L.Data, 'mm') = '03' or To_Char(L.Data, 'mm') = '02'
or To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor ABRIL
, Sum(case when To_Char(L.Data, 'mm') = '05' or To_Char(L.Data, 'mm') = '04' or To_Char(L.Data, 'mm') = '03'
or To_Char(L.Data, 'mm') = '02' or To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor MAIO
, Sum(case when To_Char(L.Data, 'mm') = '06' or To_Char(L.Data, 'mm') = '05' or To_Char(L.Data, 'mm') = '04'
or To_Char(L.Data, 'mm') = '03' or To_Char(L.Data, 'mm') = '02'
or To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor JUNHO
, Sum(case when To_Char(L.Data, 'mm') = '07' or To_Char(L.Data, 'mm') = '06' or To_Char(L.Data, 'mm') = '05'
or To_Char(L.Data, 'mm') = '04' or To_Char(L.Data, 'mm') = '03'
or To_Char(L.Data, 'mm') = '02' or To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor JULHO
, Sum(case when To_Char(L.Data, 'mm') = '08' or To_Char(L.Data, 'mm') = '07' or To_Char(L.Data, 'mm') = '06'
or To_Char(L.Data, 'mm') = '05' or To_Char(L.Data, 'mm') = '04'
or To_Char(L.Data, 'mm') = '03' or To_Char(L.Data, 'mm') = '02'
or To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor AGOSTO
, Sum(case when To_Char(L.Data, 'mm') = '09' or To_Char(L.Data, 'mm') = '08' or To_Char(L.Data, 'mm') = '07'
or To_Char(L.Data, 'mm') = '06' or To_Char(L.Data, 'mm') = '05'
or To_Char(L.Data, 'mm') = '04' or To_Char(L.Data, 'mm') = '03'
or To_Char(L.Data, 'mm') = '02' or To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor SETEMBRO
, Sum(case when To_Char(L.Data, 'mm') = '10' or To_Char(L.Data, 'mm') = '09' or To_Char(L.Data, 'mm') = '08'
or To_Char(L.Data, 'mm') = '07' or To_Char(L.Data, 'mm') = '06'
or To_Char(L.Data, 'mm') = '05' or To_Char(L.Data, 'mm') = '04'
or To_Char(L.Data, 'mm') = '03' or To_Char(L.Data, 'mm') = '02'
or To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor OUTUBRO
, Sum(case when To_Char(L.Data, 'mm') = '11' or To_Char(L.Data, 'mm') = '10' or To_Char(L.Data, 'mm') = '09'
or To_Char(L.Data, 'mm') = '08' or To_Char(L.Data, 'mm') = '07'
or To_Char(L.Data, 'mm') = '06' or To_Char(L.Data, 'mm') = '05'
or To_Char(L.Data, 'mm') = '04' or To_Char(L.Data, 'mm') = '03'
or To_Char(L.Data, 'mm') = '02' or To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor NOVEMBRO
, Sum(case when To_Char(L.Data, 'mm') = '12' or To_Char(L.Data, 'mm') = '11' or To_Char(L.Data, 'mm') = '10'
or To_Char(L.Data, 'mm') = '09' or To_Char(L.Data, 'mm') = '08'
or To_Char(L.Data, 'mm') = '07' or To_Char(L.Data, 'mm') = '06'
or To_Char(L.Data, 'mm') = '05' or To_Char(L.Data, 'mm') = '04'
or To_Char(L.Data, 'mm') = '03' or To_Char(L.Data, 'mm') = '02'
or To_Char(L.Data, 'mm') = '01' then
(Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End)end)-S.Valor DEZEMBRO
, Round(Sum(L.Valor * Case When Credito Is Not Null Then 1
When Debito Is Not Null Then -1 End),2) AS TOTAL
, Round(Sum(L.Valor * Case When Credito Is Not Null Then 1
When Debito Is Not Null Then -1 End)/12,2) As MEDIA
From cLanca L right join cConta C
ON L.CodColigada = C.CodColigada
AND (L.Credito = C.CodConta
OR L.Debito = C.CodConta)
AND to_Char(L.Data,’yy’) <= '10'
left Join cSDant S
ON S.CodColigada = C.CodColigada
and S.CodConta = C.Codconta
and Substr(C.Codconta,1,1) = '1'
GROUP BY C.CodConta,
C.Descricao,
S.valor
ORDER BY C.codConta
Meu unico problema agora é:
Quando eu pego informacoes de 2010…. digamos ate maio de 2010 (data atual) ele mostra dados de junho..2010…julho…agosto…etc
ele mostra, pq ele subtrai com os valores do ano passado, conforme script acima…. eu precisava criar mais um case… pra ele consultar…. (caso o valor referente a data de maio de 2010 (por eemplo) seja igual a zero, entao o resultado todo será igual a zero)…. sozinho consigo, agora colocar esse caso dentro daqueles cases ali que complica…
abracos