Pular para o conteúdo

Fóruns SQL e PL/SQL Pegar Coluna e somar Mes a Mes é possivel? Pegar Coluna e somar Mes a Mes é possivel?

#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