Pular para o conteúdo
  • Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 9 meses atrás por MARCIO_LOK.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #94074
    MARCIO_LOK
    Participante

      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 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.Codconta

      se 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,35

      preciso jogar essas subtracoes embaixo dos meses, é possivel?

      #94176
      pjoaquim
      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 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.Codconta

        se 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,35

        preciso jogar essas subtracoes embaixo dos meses, é possivel?[/quote]

        Cara… acho que só utilizando tabelas temporárias e PLSQL.

        #94178
        MARCIO_LOK
        Participante

          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

          #94188
          fsitja
          Participante

            Pode 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)?

            #94189
            MARCIO_LOK
            Participante

              Beleza, 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.77

              Ta 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,00

              coluna 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

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