Pular para o conteúdo
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #93992
    MARCIO_LOK
    Participante

      Boa 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 valor

      como 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 é credito

      Select
      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.credito

      se alguem puder me ajudar, agradeco muito

      #93996
      fsitja
      Participante

        Olá,

        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
        ----------
        190

        SQL>

        É só replicar para os outros meses agora.

        Só não há necessidade de postar a mesma pergunta em dois novos tópicos.

        #94000
        MARCIO_LOK
        Participante

          Ah 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, obrigado

          #94002
          fsitja
          Participante

            Nã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.

            #94003
            MARCIO_LOK
            Participante

              Oh tem razao… funcionou perfeitamente… obrigado

              #94018
              MARCIO_LOK
              Participante

                entao… 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….

                #94048
                fsitja
                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;

                  #94049
                  MARCIO_LOK
                  Participante

                    Oh Beleza, ficou perfeito….

                    Agora pra terminar meu relatorio só falta uma funcao ou procedure….

                    tenho uma tabela…. que tem dois campos…
                    codigo e valor

                    preciso 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…

                  Visualizando 8 posts - 1 até 8 (de 8 do total)
                  • Você deve fazer login para responder a este tópico.