Problemas com alias do campo no sum?

Firebird

26/05/2011

Como montar a soma deste select aqui - Uso firebird 1.5

Código:
select


financeiro_contas.data_vencimento,


financeiro_contas.boleto_valor,


case when financeiro_contas.boleto_multa_percentual = 0 then


    coalesce(sum(financeiro_contas.boleto_valor * 2 /100),0)


  else


    coalesce(sum(financeiro_contas.boleto_valor * financeiro_contas.boleto_multa_percentual /100),0)


  end


as Vl_Multa,





financeiro_fixo_boleto.cartorio,


financeiro_fixo_boleto.serasa,


financeiro_fixo_boleto.contatos,


financeiro_fixo_boleto.depos_ident,


financeiro_fixo_boleto.baixa,


financeiro_fixo_boleto.correios_firmas,


financeiro_fixo_boleto.i_contrato,


financeiro_fixo_boleto.mes_fim,


financeiro_fixo_boleto.multa_contrato,





sum(coalesce(vl_multa,0)+


coalesce(financeiro_fixo_boleto.cartorio,0) +


coalesce(financeiro_fixo_boleto.serasa,0) +


coalesce(financeiro_fixo_boleto.contatos,0) +


coalesce(financeiro_fixo_boleto.depos_ident,0) +


coalesce(financeiro_fixo_boleto.baixa,0) +


coalesce(financeiro_fixo_boleto.correios_firmas,0) +


coalesce(financeiro_fixo_boleto.i_contrato,0)+


coalesce(financeiro_fixo_boleto.mes_fim,0) +


coalesce(financeiro_fixo_boleto.multa_contrato,0))as Total








from financeiro_contas, financeiro_fixo_boleto





where financeiro_contas.codigo_cliente = :codigo


and financeiro_contas.boleto = 'Sim'


and financeiro_contas.cancelado <> 'Sim'





group by


financeiro_contas.data_vencimento,


financeiro_contas.boleto_valor,


financeiro_contas.boleto_multa_percentual,


financeiro_fixo_boleto.cartorio,


financeiro_fixo_boleto.serasa,


financeiro_fixo_boleto.contatos,


financeiro_fixo_boleto.depos_ident,


financeiro_fixo_boleto.baixa,


financeiro_fixo_boleto.correios_firmas,


financeiro_fixo_boleto.i_contrato,


financeiro_fixo_boleto.mes_fim,


financeiro_fixo_boleto.multa_contrato



Vejam o erro de referencia

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
VL_MULTA.
At line 21, column 14.
Adriano Dolce

Adriano Dolce

Curtidas 0

Respostas

Rafael Mattos

Rafael Mattos

26/05/2011

VL_MULTA existe na sua tabela?
GOSTEI 0
Adriano Dolce

Adriano Dolce

26/05/2011

Não, é um apelido que dei no case

' CASE WHEN financeiro_contas.boleto_multa_percentual = 0 then '+
        '     COALESCE(sum(financeiro_contas.boleto_valor * 2 /100),0) '+
        '   ELSE '+
        '     COALESCE(sum(financeiro_contas.boleto_valor * financeiro_contas.boleto_multa_percentual /100),0) '+
        '   END '+
        ' as Vl_Multa,'+

GOSTEI 0
Rafael Mattos

Rafael Mattos

26/05/2011



case when financeiro_contas.boleto_multa_percentual = 0 then
    coalesce(sum(financeiro_contas.boleto_valor * 2 /100),0)
  else
    coalesce(sum(financeiro_contas.boleto_valor * financeiro_contas.boleto_multa_percentual /100),0)
  end
as Vl_Multa,

....

sum(coalesce(vl_multa,0)+



----------------------


se esse sum tiver sendo de case ele não aceita isso vc teria que colocar tudo dentro novamente


-----------------------
sum(coalesce(case when financeiro_contas.boleto_multa_percentual = 0 then
    coalesce(sum(financeiro_contas.boleto_valor * 2 /100),0)
  else
    coalesce(sum(financeiro_contas.boleto_valor * financeiro_contas.boleto_multa_percentual /100),0)
  end,0)+
GOSTEI 0
Rafael Mattos

Rafael Mattos

26/05/2011

Não, é um apelido que dei no case

' CASE WHEN financeiro_contas.boleto_multa_percentual = 0 then '+
        '     COALESCE(sum(financeiro_contas.boleto_valor * 2 /100),0) '+
        '   ELSE '+
        '     COALESCE(sum(financeiro_contas.boleto_valor * financeiro_contas.boleto_multa_percentual /100),0) '+
        '   END '+
        ' as Vl_Multa,'+




entendi ele não aceita esse tipo de referencia, pq está no proprio select
GOSTEI 0
Adriano Dolce

Adriano Dolce

26/05/2011

Não, é um apelido que dei no case

' CASE WHEN financeiro_contas.boleto_multa_percentual = 0 then '+
        '     COALESCE(sum(financeiro_contas.boleto_valor * 2 /100),0) '+
        '   ELSE '+
        '     COALESCE(sum(financeiro_contas.boleto_valor * financeiro_contas.boleto_multa_percentual /100),0) '+
        '   END '+
        ' as Vl_Multa,'+




entendi ele não aceita esse tipo de referencia, pq está no proprio select
Sim, entendo, mais não teria uma forma de fazer isso?

Proeciso da soma no final.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/05/2011

acho que assim resolve:

select
    financeiro_contas.data_vencimento,
    financeiro_contas.boleto_valor,

    case when financeiro_contas.boleto_multa_percentual = 0
        then coalesce(financeiro_contas.boleto_valor,0) * 2 / 100
        else coalesce(financeiro_contas.boleto_valor,0) * financeiro_contas.boleto_multa_percentual / 100
    end as Vl_Multa,

    financeiro_fixo_boleto.cartorio,
    financeiro_fixo_boleto.serasa,
    financeiro_fixo_boleto.contatos,
    financeiro_fixo_boleto.depos_ident,
    financeiro_fixo_boleto.baixa,
    financeiro_fixo_boleto.correios_firmas,
    financeiro_fixo_boleto.i_contrato,
    financeiro_fixo_boleto.mes_fim,
    financeiro_fixo_boleto.multa_contrato,

    sum(
        (case when financeiro_contas.boleto_multa_percentual = 0
            then coalesce(financeiro_contas.boleto_valor,0) * 2 / 100
            else coalesce(financeiro_contas.boleto_valor,0) * financeiro_contas.boleto_multa_percentual / 100
        end) +
        coalesce(financeiro_fixo_boleto.cartorio,0) +
        coalesce(financeiro_fixo_boleto.serasa,0) +
        coalesce(financeiro_fixo_boleto.contatos,0) +
        coalesce(financeiro_fixo_boleto.depos_ident,0) +
        coalesce(financeiro_fixo_boleto.baixa,0) +
        coalesce(financeiro_fixo_boleto.correios_firmas,0) +
        coalesce(financeiro_fixo_boleto.i_contrato,0)+
        coalesce(financeiro_fixo_boleto.mes_fim,0) +
        coalesce(financeiro_fixo_boleto.multa_contrato,0)
    ) as Total

from
    financeiro_contas, financeiro_fixo_boleto

where
    financeiro_contas.codigo_cliente = :codigo
    and financeiro_contas.boleto = 'Sim'
    and financeiro_contas.cancelado <> 'Sim'
group by
    financeiro_contas.data_vencimento,
    financeiro_contas.boleto_valor,
    financeiro_contas.boleto_multa_percentual,
    financeiro_fixo_boleto.cartorio,
    financeiro_fixo_boleto.serasa,
    financeiro_fixo_boleto.contatos,
    financeiro_fixo_boleto.depos_ident,
    financeiro_fixo_boleto.baixa,
    financeiro_fixo_boleto.correios_firmas,
    financeiro_fixo_boleto.i_contrato,
    financeiro_fixo_boleto.mes_fim,
    financeiro_fixo_boleto.multa_contrato

mas observei um PEQUENO detalhe: em que momento você está relacionando as tabelas financeiro_contas e financeiro_fixo_boleto ???
GOSTEI 0
Adriano Dolce

Adriano Dolce

26/05/2011

Olá Emerson, tudo bem?

Nao existe relacionamento, pois na tabela financeiro_fixo_boleto possui apenas uma linha, é um valor fixo para todos

Valeu amigo, agora deu certo, muito obrigado a todos que me ajudaram.
GOSTEI 0
POSTAR