- Este tópico contém 7 respostas, 2 vozes e foi atualizado pela última vez 15 anos, 10 meses atrás por
MARCIO_LOK.
-
AutorPosts
-
13 de maio de 2010 às 11:22 pm #93992
MARCIO_LOK
ParticipanteBoa Tarde Pessoal
TO desenvolvendo um plano de contas em oracle, o´problema é que nao consigo pedir pra ele subtrair o valor quando é debito (tabela clanca) e somar quando é credito….
O script segue abaixo, se alguem puder me ajudar…
Seria esse campo L.Valor, tentei colocar um case junto, dizendo que se campo credito fosse diferente de nulo pra ele somar, se o campo debito for diferente de nulo pra ele subtrair… mais nao funcionou.
Obs: Campo Credito e Debito estao em uma tabela chamada clanca, ela tem a seguinte estrutura.
data credito debito valorcomo eu sei quando é debito ou credito? Quando o campo credito ou debito esta preenchido… exemplo:
data credito debito valor
10/09 null 123321 100,00 — nesse caso é debito
11/08 23454 null 98.88 — nesse caso é creditoSelect
L.Credito As “Contas”
, Sum(Decode(To_Char(L.Data, ‘mm’), ’01’ ,Nvl(L.Valor,0) ) )-S.Valor Janeiro
, Sum(Decode(To_Char(L.Data, ‘mm’), ’02’ ,Nvl(L.Valor,0) ) )-S.Valor Fevereiro
, Sum(Decode(To_Char(L.Data, ‘mm’), ’03’ ,Nvl(L.Valor,0) ) )-S.Valor Março
, Sum(Decode(To_Char(L.Data, ‘mm’), ’04’ ,Nvl(L.Valor,0) ) )-S.Valor Abril
, Sum(Decode(To_Char(L.Data, ‘mm’), ’05’ ,Nvl(L.Valor,0) ) )-S.Valor Maio
, Sum(Decode(To_Char(L.Data, ‘mm’), ’06’ ,Nvl(L.Valor,0) ) )-S.Valor Junho
, Sum(Decode(To_Char(L.Data, ‘mm’), ’07’ ,Nvl(L.Valor,0) ) )-S.Valor Julho
, Sum(Decode(To_Char(L.Data, ‘mm’), ’08’ ,Nvl(L.Valor,0) ) )-S.Valor Agosto
, Sum(Decode(To_Char(L.Data, ‘mm’), ’09’ ,Nvl(L.Valor,0) ) )-S.Valor Setembro
, Sum(Decode(To_Char(L.Data, ‘mm’), ’10’ ,Nvl(L.Valor,0) ) )-S.Valor Outubro
, Sum(Decode(To_Char(L.Data, ‘mm’), ’11’ ,Nvl(L.Valor,0) ) )-S.Valor Novembro
, Sum(Decode(To_Char(L.Data, ‘mm’), ’12’ ,Nvl(L.Valor,0) ) )-S.Valor Dezembro
, S.Valor
From Clanca L Join Cconta C
On L.Codcoligada = C.Codcoligada
And L.credito = C.Codconta
Join Csdant S
On S.Codcoligada = C.Codcoligada
And S.Codconta = C.Codconta
And Substr(L.Credito,1,1) = ‘1’
And To_Char(L.Data,’yy’) = ’09’
GROUP BY L.Credito, S.Valor
order by L.creditose alguem puder me ajudar, agradeco muito
14 de maio de 2010 às 12:23 am #93996fsitja
ParticipanteOlá,
Algo assim atenderia:
————————————————————————————————————————————————————————
SQL> create table clanca (data date,
2 credito number(10),
3 debito number(10),
4 valor number(15, 2));Table created
SQL> begin
2 insert into clanca values (to_date('05/01/2010', 'DD/MM/YYYY'), 1001, null, 50);
3 insert into clanca values (to_date('07/01/2010', 'DD/MM/YYYY'), 1002, null, 120);
4 insert into clanca values (to_date('12/01/2010', 'DD/MM/YYYY'), 1003, null, 80);
5 insert into clanca values (to_date('04/01/2010', 'DD/MM/YYYY'), null, 2001, 10);
6 insert into clanca values (to_date('06/01/2010', 'DD/MM/YYYY'), null, 2002, 20);
7 insert into clanca values (to_date('20/01/2010', 'DD/MM/YYYY'), null, 2003, 30);
8 commit;
9 end;
10 /PL/SQL procedure successfully completed
SQL> select sum(decode(to_char(l.data, 'mm'),
2 '01',
3 l.valor * case when credito is not null then 1
4 when debito is not null then -1 end
5 )) janeiro
6 from clanca l;JANEIRO
----------
190SQL>
É só replicar para os outros meses agora.
Só não há necessidade de postar a mesma pergunta em dois novos tópicos.
14 de maio de 2010 às 3:38 am #94000MARCIO_LOK
ParticipanteAh entendi…
Teria que criar uma nova tabela…. incluir os dados… e depois consultar….
consultar diretamente é impossivel? É que estou usando um programa que gera relatorio e usa comandos PL/SQL criar uma nova tabela fica impossivel, porque nesse gerador de relatorios, só posso fazer select e comandos relacionados com select.
Sobre postar a resposta duas vezes, foi engano, isso nao ocorrera novamente, obrigado14 de maio de 2010 às 4:44 pm #94002fsitja
ParticipanteNão precisa, você já tem a tabela, não? Apenas eu tive que criar a tabela para poder testar, senão eu não poderia mostrar o SQL executando.
14 de maio de 2010 às 4:49 pm #94003MARCIO_LOK
ParticipanteOh tem razao… funcionou perfeitamente… obrigado
15 de maio de 2010 às 2:32 pm #94018MARCIO_LOK
Participanteentao… ficou assim:
codigo janeiro fevereiro marco…ate dezembro.
0001 234.77 456.88 223.88
0002 456.99 777.00 66.88
…É possivel somar por linha? Tipo depois da coluna dezembro… colocar uma coluna total, que mostre a soma do codigo um de janeiro ate dezembro? Exemplo…
codigo janeiro fevereiro marco…ate dezembro. total
0001 234.77 456.88 223.88 347.00 3333.00 (exemplo)
0002 456.99 777.00 66.88 23.00 556.00 (exemplo)(somar os valores por linhas)
Obrigado mais uma vez….18 de maio de 2010 às 1:22 am #94048fsitja
ParticipanteÉ só acrescentar uma coluna sem o decode, pois é ele quem faz a separação por mês:
select sum(l.valor * case when credito is not null then 1
when debito is not null then -1 end)) total
from clanca l;
18 de maio de 2010 às 3:51 am #94049MARCIO_LOK
ParticipanteOh Beleza, ficou perfeito….
Agora pra terminar meu relatorio só falta uma funcao ou procedure….
tenho uma tabela…. que tem dois campos…
codigo e valorpreciso que essa function venha subtraindo mes a mes de minha tabela principal, ou seja, essa primeira que vcs me ajudaram a fazer…..
acredito que essa funcao deva receber o campo codigo e o numero do mes, correto?
a tabela que acabei de citar, sempre guarda o valor de dezembro..
obrigado mais uma vez… -
AutorPosts
- Você deve fazer login para responder a este tópico.