none
Formula matematica RRS feed

  • Pergunta

  • Amigos estou querendo calcular alguns campos para buscar o percentual, mas não estou conseguindo. Alguem poderia me ajudar?

     

    Select SubQ.Escob, SubQ.Faixa, SubQ.AnoMes,
     Sum(SubQ.Vl_Carga) as Vl_Carga,
     Sum(Solicitacao) as Solicitacao,
     Sum(SubQ.Acima_de_5_dias) as Acima_de_5_dias,
     Sum(SubQ.Ate_5_dias) as Ate_5_dias,
     SubQ.Acima_de_5_dias / SubQ.Vl_Carga + SubQ.Solicitacao + SubQ.Ate_5_dias as Comissionamento
    From ( Select Escob, Faixa,  Cast(Ano as varchar) + '/' + Right('0' + Cast(Mes_Num as varchar),2) AnoMes ,
     Sum(Vl_Conta) as Vl_Carga,
     Case When Motivo_Devolucao = 'Solicitação' then Sum(Vl_Conta)end as Solicitacao,
     Case When Pgto_Antecipado = 'Acima de 5 Dias' then Sum(Vl_Pago)end as Acima_de_5_dias,
     Case When Pgto_Antecipado = 'Até 5 Dias' then Sum(Vl_Pago)end as Ate_5_dias
    From G_ANALISE_ESCOB
    Where Faixa = '151 a 214'
    Group By Escob, Faixa, Ano, Mes_Num, PGTO_ANTECIPADO, Motivo_Devolucao
    ) SubQ
    Group By SubQ.Escob, SubQ.Faixa, SubQ.AnoMes, SubQ.Acima_de_5_dias, SubQ.Vl_Carga, SubQ.Solicitacao, SubQ.Ate_5_dias
    Order By 1

     

    Obs: o campo é esse em vermelho

     

    ACAO 151 a 214 2007/07 151263.82 NULL NULL 123243.84 NULL
    ACAO 151 a 214 2007/07 202142.54 202142.54 NULL NULL NULL
    ACAO 151 a 214 2007/07 16328531.53 NULL NULL NULL NULL
    ACAO 151 a 214 2007/07 18652037.23 NULL NULL NULL NULL
    ACAO 151 a 214 2007/07 1464511.00 NULL 928276.06 NULL NULL
    ACAO 151 a 214 2007/08 100485.57 100485.57 NULL NULL NULL
    ACAO 151 a 214 2007/08 120630.78 NULL NULL 90039.36 NULL
    ACAO 151 a 214 2007/08 8128029.78 NULL NULL NULL NULL
    ACAO 151 a 214 2007/08 9776875.15 NULL NULL NULL NULL
    ACAO 151 a 214 2007/08 1284586.48 NULL 789615.91 NULL NULL
    ACAO 151 a 214 2007/09 22119.74 22119.74 NULL NULL NULL
    ACAO 151 a 214 2007/09 123799.10 NULL NULL 88717.59 NULL
    ACAO 151 a 214 2007/09 7745790.62 NULL NULL NULL NULL

    terça-feira, 1 de abril de 2008 19:39

Respostas

  • Olá Daniel,

     

    Primeira a divisão e a multiplicação e depois a adição e a subtração. Da forma como está ele fara a divisão primeiro para depois efetuar os demais cálculos. Tente o seguinte:

     

    Code Snippet

    CAST(IsNull(SubQ.Acima_de_5_dias,0) as numeric(10,2)) /

    CAST((IsNull(SubQ.Vl_Carga,0) - IsNull(SubQ.Solicitacao,0) - isnull(SubQ.Ate_5_dias,0)) as numeric(10,2)) as Comissionamento

     

     

    [ ]s,

     

    Gustavo

     

    PS: Você pode apagar os posts repetidos

    quarta-feira, 2 de abril de 2008 17:31

Todas as Respostas

  • Olá Daniel,

     

    Você não explicitou qual seria a dificuldade no cálculo, mas tente o seguinte

     

    Code Snippet

    CAST(SubQ.Acima_de_5_dias AS NUMERIC(10,2))

    / CAST(SubQ.Vl_Carga AS NUMERIC(10,2)) +

    SubQ.Solicitacao + SubQ.Ate_5_dias as Comissionamento

     

     

    [ ]s,

     

    Gustavo

    terça-feira, 1 de abril de 2008 19:50
  • Eu fiz o que vc sugeriu mas não tive sucesso o valor que estamos calculando ainda está vindo null

    quarta-feira, 2 de abril de 2008 14:49
  • Olá Daniel,

     

    Algum dos campos envolvidos pode ser nulo ? Se sim, substitua-o por ISNULL(Campo,0). Se o denominador puder ser nulo teremos que tratar essa exceção.

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 2 de abril de 2008 15:12
  • Tenho campo null sim. Já fiz o is null, mas o meu denominador está null.

     

    Como faço?

    quarta-feira, 2 de abril de 2008 16:06
  • Oi Daniel,

     

    Você colocou o ISNULL para todos os campos e manteve os CASTs ? O resultado é nulo para todos os registros ?

     

    [ ]s,

     

    Gustavo

    quarta-feira, 2 de abril de 2008 16:25
  • Cara eu

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função inteira por

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso o

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso estava

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso estava vindo

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso estava vindo nulo

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso estava vindo nulo após

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso estava vindo nulo após eu ter

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso estava vindo nulo após eu ter colocado o

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso estava vindo nulo após eu ter colocado o is

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso estava vindo nulo após eu ter colocado o is null.

    quarta-feira, 2 de abril de 2008 16:33
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso estava vindo nulo após eu ter colocado o is null. Porém

    quarta-feira, 2 de abril de 2008 16:34
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso estava vindo nulo após eu ter colocado o is null. Porém não

    quarta-feira, 2 de abril de 2008 16:34
  • Cara eu tinha esquecido de colocar o cast na função inteira por isso estava vindo nulo após eu ter colocado o is null. Porém não estou conseguindo

    quarta-feira, 2 de abril de 2008 16:34
  • Olá Daniel,

     

    Mas após usar o CAST e o ISNULL qual é a dificuldade ?

     

    [ ]s,

     

    Gustavo

    quarta-feira, 2 de abril de 2008 16:57
  • Cara não sei o que aconteceu postou uma pancada de post.

     

    Bom voltando a vaca fria, o resultado já está sendo preenchido, mas se calcularmos na mão o valor está totalmente errado. O que eu quero é tirar um percentual entre ( Acima_5_dias / (vl_carga  - Solicitacao - Ate_5_Dias).

     

    Destaquei em vermelho para demonstrar o valor que está sendo exibido após executar o select abaixo.

     

    escob  faixa        anomes  vl_carga   Solicitacao   Acima_5_dias  Ate_5_Dias     Comissionamento

    ACAO 151 a 214 2007/07 151263.82            .00                   .00     123243.84    123243

     

     

    Select SubQ.Escob, SubQ.Faixa, SubQ.AnoMes,
     Sum(isnull(SubQ.Vl_Carga,0)) as Vl_Carga,
     Sum(isnull(Solicitacao,0)) as Solicitacao,
     Sum(isnull(SubQ.Acima_de_5_dias,0)) as Acima_de_5_dias,
     Sum(isnull(SubQ.Ate_5_dias,0)) as Ate_5_dias,
     Cast(Cast(isnull(SubQ.Acima_de_5_dias,0) as numeric(10,2)) / Cast(isnull(SubQ.Vl_Carga,0) as numeric(10,2)) +
     Cast(isnull(SubQ.Solicitacao,0) as numeric(10,2)) + Cast(isnull(SubQ.Ate_5_dias,0) as numeric(10,2)) as int) as Comissionamento

    From ( Select Escob, Faixa,  Cast(Ano as varchar) + '/' + Right('0' + Cast(Mes_Num as varchar),2) AnoMes ,
     Sum(Vl_Conta) as Vl_Carga,
     Case When Motivo_Devolucao = 'Solicitação' then Sum(Vl_Conta)end as Solicitacao,
     Case When Pgto_Antecipado = 'Acima de 5 Dias' then Sum(Vl_Pago)end as Acima_de_5_dias,
     Case When Pgto_Antecipado = 'Até 5 Dias' then Sum(Vl_Pago)end as Ate_5_dias
    From G_ANALISE_ESCOB

    Where Faixa = '151 a 214'

    Group By Escob, Faixa, Ano, Mes_Num, PGTO_ANTECIPADO, Motivo_Devolucao) SubQ

    Group By SubQ.Escob, SubQ.Faixa, SubQ.AnoMes, SubQ.Acima_de_5_dias, SubQ.Vl_Carga,
    SubQ.Solicitacao, SubQ.Ate_5_dias

    quarta-feira, 2 de abril de 2008 17:16
  • Olá Daniel,

     

    Primeira a divisão e a multiplicação e depois a adição e a subtração. Da forma como está ele fara a divisão primeiro para depois efetuar os demais cálculos. Tente o seguinte:

     

    Code Snippet

    CAST(IsNull(SubQ.Acima_de_5_dias,0) as numeric(10,2)) /

    CAST((IsNull(SubQ.Vl_Carga,0) - IsNull(SubQ.Solicitacao,0) - isnull(SubQ.Ate_5_dias,0)) as numeric(10,2)) as Comissionamento

     

     

    [ ]s,

     

    Gustavo

     

    PS: Você pode apagar os posts repetidos

    quarta-feira, 2 de abril de 2008 17:31