- Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 9 meses atrás por
MARCIO_LOK.
-
AutorPosts
-
19 de maio de 2010 às 3:02 pm #94074
MARCIO_LOK
ParticipanteBom dia Pessoal
Eu tenho um select, que me tras os valores mensais, ele verifica se o valor é credito ou debito, soma e agrupa por mes, ate ai tudo bem….
Eu tenho um valor inicial 100.00, eu preciso vir subtraindo esse valor mensalmente é possivel isso?
Tipo Assim:Valor de Dezembro – 100,00
Valor de Novembro – dezembro – 100,00
Valor de Outubro – novembro – dezembro – 100,00
(obs..esses 100.00 vou buscar em uma outra tabela, porque o valor nao é fixo, só usei o valor como exemplo)Seria possivel isso? Por exemplo na coluna que aparece o valor de outubro, eu teria que jogar esse valor subtraindo novembro, dezembro e os 100,00… seria possivel?
Segue o Script abaixo:
Select
H.Descricao AS DESCRICAO, H.CodConta AS CODCONTAS
, Sum(Decode(To_Char(L.Data, ‘mm’),’01’,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End ) ) Janeiro, Sum(Decode(To_Char(L.Data, ‘mm’), ’02’,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
when credito is not null then L.Valor end ) ) Fevereiro, Sum(Decode(To_Char(L.Data, ‘mm’), ’03’,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
when credito is not null then L.Valor end ) ) Marco, Sum(Decode(To_Char(L.Data, ‘mm’), ’04’ ,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
when credito is not null then L.Valor end ) ) Abril, Sum(Decode(To_Char(L.Data, ‘mm’), ’05’ ,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
when credito is not null then L.Valor end ) ) Maio, Sum(Decode(To_Char(L.Data, ‘mm’), ’06’ ,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
when credito is not null then L.Valor end ) ) Junho, Sum(Decode(To_Char(L.Data, ‘mm’), ’07’ ,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
when credito is not null then L.Valor end ) ) Julho, Sum(Decode(To_Char(L.Data, ‘mm’), ’08’ ,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
when credito is not null then L.Valor end ) ) Agosto, Sum(Decode(To_Char(L.Data, ‘mm’), ’09’ ,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
when credito is not null then L.Valor end ) ) Setembro, Sum(Decode(To_Char(L.Data, ‘mm’), ’10’ ,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
when credito is not null then L.Valor end ) ) Outubro, Sum(Decode(To_Char(L.Data, ‘mm’), ’11’ ,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
when credito is not null then L.Valor end ) ) Novembro, Sum(Decode(To_Char(L.Data, ‘mm’), ’12’ ,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End ) ) 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,Cconta C,Csdant S,
Ccontahistorico H
Where
H.Codcoligada = C.Codcoligada
And H.Codconta(+) = C.Codconta
And L.Codcoligada = C.Codcoligada
And (L.Credito = C.Codconta
Or L.Debito = C.Codconta)
And S.Codcoligada = C.Codcoligada
And S.Codconta = C.Codconta
And Substr(C.Codconta,1,1) = ‘1’
And To_Char(L.Data,’yy’) = ’09’
GROUP BY H.Descricao, H.CodConta
Order By H.Codcontase alguem puder me ajudar, ele esta agrupando por conta…..
o resultado desse select é assim:DESCRICAO CODCONTAS JANEIRO FEVEREIRO MARCO ABRIL …ate dezembro…
1 CAIXA 12111900001 2522,94 5142,98 6828,2 10479,52
2 REAL ABN AMRO – C/C 5.710.132-5 12131900002 38456,98 -16161,01 17397,07 15358,87
3 UNIBANCO – C/C 822.506-6 12131900007 -2569,36 2446,17 -3180,08 3481,35preciso jogar essas subtracoes embaixo dos meses, é possivel?
24 de maio de 2010 às 8:20 pm #94176pjoaquim
Participante[quote=”MARCIO_LOK”:19e8z928]Bom dia Pessoal
Eu tenho um select, que me tras os valores mensais, ele verifica se o valor é credito ou debito, soma e agrupa por mes, ate ai tudo bem….
Eu tenho um valor inicial 100.00, eu preciso vir subtraindo esse valor mensalmente é possivel isso?
Tipo Assim:Valor de Dezembro – 100,00
Valor de Novembro – dezembro – 100,00
Valor de Outubro – novembro – dezembro – 100,00
(obs..esses 100.00 vou buscar em uma outra tabela, porque o valor nao é fixo, só usei o valor como exemplo)Seria possivel isso? Por exemplo na coluna que aparece o valor de outubro, eu teria que jogar esse valor subtraindo novembro, dezembro e os 100,00… seria possivel?
Segue o Script abaixo:
Select
H.Descricao AS DESCRICAO, H.CodConta AS CODCONTAS
, Sum(Decode(To_Char(L.Data, ‘mm’),’01’,
Case When Debito Is Not Null And
Partida Is Not Null Then -L.Valor
When Credito Is Not Null Then L.Valor End ) ) Janeiro, Sum(Decode(To_Char(L.Data, 'mm'), '02', Case When Debito Is Not Null And Partida Is Not Null Then -L.Valor when credito is not null then L.Valor end ) ) Fevereiro , Sum(Decode(To_Char(L.Data, 'mm'), '03', Case When Debito Is Not Null And Partida Is Not Null Then -L.Valor when credito is not null then L.Valor end ) ) Marco , Sum(Decode(To_Char(L.Data, 'mm'), '04' , Case When Debito Is Not Null And Partida Is Not Null Then -L.Valor when credito is not null then L.Valor end ) ) Abril , Sum(Decode(To_Char(L.Data, 'mm'), '05' , Case When Debito Is Not Null And Partida Is Not Null Then -L.Valor when credito is not null then L.Valor end ) ) Maio , Sum(Decode(To_Char(L.Data, 'mm'), '06' , Case When Debito Is Not Null And Partida Is Not Null Then -L.Valor when credito is not null then L.Valor end ) ) Junho , Sum(Decode(To_Char(L.Data, 'mm'), '07' , Case When Debito Is Not Null And Partida Is Not Null Then -L.Valor when credito is not null then L.Valor end ) ) Julho , Sum(Decode(To_Char(L.Data, 'mm'), '08' , Case When Debito Is Not Null And Partida Is Not Null Then -L.Valor when credito is not null then L.Valor end ) ) Agosto , Sum(Decode(To_Char(L.Data, 'mm'), '09' , Case When Debito Is Not Null And Partida Is Not Null Then -L.Valor when credito is not null then L.Valor end ) ) Setembro , Sum(Decode(To_Char(L.Data, 'mm'), '10' , Case When Debito Is Not Null And Partida Is Not Null Then -L.Valor when credito is not null then L.Valor end ) ) Outubro , Sum(Decode(To_Char(L.Data, 'mm'), '11' , Case When Debito Is Not Null And Partida Is Not Null Then -L.Valor when credito is not null then L.Valor end ) ) Novembro , Sum(Decode(To_Char(L.Data, 'mm'), '12' , Case When Debito Is Not Null And Partida Is Not Null Then -L.Valor When Credito Is Not Null Then L.Valor End ) ) 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 MediaFrom Clanca L,Cconta C,Csdant S,
Ccontahistorico H
Where
H.Codcoligada = C.Codcoligada
And H.Codconta(+) = C.Codconta
And L.Codcoligada = C.Codcoligada
And (L.Credito = C.Codconta
Or L.Debito = C.Codconta)
And S.Codcoligada = C.Codcoligada
And S.Codconta = C.Codconta
And Substr(C.Codconta,1,1) = ‘1’
And To_Char(L.Data,’yy’) = ’09’
GROUP BY H.Descricao, H.CodConta
Order By H.Codcontase alguem puder me ajudar, ele esta agrupando por conta…..
o resultado desse select é assim:DESCRICAO CODCONTAS JANEIRO FEVEREIRO MARCO ABRIL ...ate dezembro...1 CAIXA 12111900001 2522,94 5142,98 6828,2 10479,52
2 REAL ABN AMRO – C/C 5.710.132-5 12131900002 38456,98 -16161,01 17397,07 15358,87
3 UNIBANCO – C/C 822.506-6 12131900007 -2569,36 2446,17 -3180,08 3481,35preciso jogar essas subtracoes embaixo dos meses, é possivel?[/quote]
Cara… acho que só utilizando tabelas temporárias e PLSQL.
24 de maio de 2010 às 8:32 pm #94178MARCIO_LOK
ParticipanteConsegui 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 MEDIAFrom 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.valorORDER 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…
abracos24 de maio de 2010 às 9:51 pm #94188fsitja
ParticipantePode ser eu só, mas li várias vezes a explicação, o SQL e não consegui entender o que você quis dizer que é o problema agora, e o que você está tentando obter.
Teria como dar exemplos (em valores, etc)?
24 de maio de 2010 às 10:06 pm #94189MARCIO_LOK
ParticipanteBeleza, vamos la!
Vc reparou no codigo acima, que ele pega por exemplo o mes de junho… e subtrai o mes de maio, de abril, de marco, de fevereiro, de janeiro?
Tudo isso com ano de 2009, Ok? Entendeu?Se eu peço do ano de 2010, ele aplica a mesma regra, ai esta o problema…
ele pega a data e o valor de junho…. que nao tem nada, ou seja, é zero… e subtrai com valor de maio, se la for 100 reais, entao o valor de junho passa a ser -100 reais, aonde o correto seira mostrar zero, porque nao tem lancamento nenhum no mes de junho.ele fica assim?
codigo janeiro fevereiro marco abril maio junho…ate dezemvbro…
001 545,88 6789,88 56,88 66,88 66.88 5,88
002 54,66 55,77 88,9 123,3 343,66 6.77Ta vendo isso seria de 2009, ja em 2010, teria que sair assim:
codigo janeiro fevereiro marco abril maio junho…ate dezemvbro…
001 545,88 6789,88 56,88 66,88 66.88 0,00
002 54,66 55,77 88,9 123,3 343,66 0,00coluna de junho, sair zerado….
Só queria um case, dentro desse case, tipo assim:
Case when To_Char(L.Data, ‘mm’) = ’02’ and is not null valor Then (colocar toda soma aqui…. feita a partir do sum(case …do codigo acima)
else 0(zero) end…..mais nao consigo fazer isso funcionar dentro do codigo….obrigado
-
AutorPosts
- Você deve fazer login para responder a este tópico.