[firebase-br] Dúvida em SUM() com Group By

Hélio Oliveira hpensador em gmail.com
Ter Abr 10 09:05:54 -03 2012


Bom dia Marlon!

Todos os campos que fizerem parte de sua consulta, devem esta na lista 
do Group By.

como você tem alguns sub-selects em sua consulta, utilize o indece (1, 
2, 3 ...).

> Boa noite galera!
>
> Tenho a seguinte query:
>
> SELECT
>      a.co_associado, a.nu_contrato, a.no_associado,
>      a.dt_cadastro, a.dt_adesao, a.dt_reativacao, a.dt_cancelamento,
>      (SELECT SUM(pa.vl_contratado) AS VL_TITULAR FROM TB_PRODUTOS_ASSOCIADOS
> pa WHERE pa.ds_ativo = :ativo AND pa.co_associado = a.co_associado) as
> vl_titular,
>      (SELECT SUM(pa.vl_contratado) AS VL_DEPENDENTE FROM
> TB_PRODUTOS_DEPENDENTES pa WHERE pa.ds_ativo =  :ativo AND pa.co_associado
> = a.co_associado) as vl_dependente
>    FROM TB_ASSOCIADOS a
>   WHERE a.dt_adesao between :dataini and :datafim and a.dt_cancelamento is
> null
>
> Onde tenho por retorno
> Código Associado, Número do Contrato, Nome do Associado, Data de Cadastro,
> Data de Adesão, Data de Reativação, Data de Cancelamento, Valor Total dos
> Benefícios do Titular e Valor de Total dos Benefícios do Dependente.
>
> Estou tentando por linda ainda somar o valor total do contrato somando o
> valor total de benefícios do titular + o valor total de benefícios do
> dependente da seguinte forma:
>
> SELECT
>      a.co_associado, a.nu_contrato, a.no_associado,
>      a.dt_cadastro, a.dt_adesao, a.dt_reativacao, a.dt_cancelamento,
>      (SELECT SUM(pa.vl_contratado) AS VL_TITULAR FROM TB_PRODUTOS_ASSOCIADOS
> pa WHERE pa.ds_ativo = :ativo AND pa.co_associado = a.co_associado) as
> vl_titular,
>      (SELECT SUM(pa.vl_contratado) AS VL_DEPENDENTE FROM
> TB_PRODUTOS_DEPENDENTES pa WHERE pa.ds_ativo =  :ativo AND pa.co_associado
> = a.co_associado) as vl_dependente,
>      SUM(
>           (SELECT SUM(pa.vl_contratado) AS VL_TITULAR FROM
> TB_PRODUTOS_ASSOCIADOS pa WHERE pa.ds_ativo = :ativo AND pa.co_associado =
> a.co_associado)
>           +
>           (SELECT SUM(pa.vl_contratado) AS VL_DEPENDENTE FROM
> TB_PRODUTOS_DEPENDENTES pa WHERE pa.ds_ativo =  :ativo AND pa.co_associado
> = a.co_associado)
>         ) AS VL_CONTRATO
>    FROM TB_ASSOCIADOS a
>   WHERE a.dt_adesao between :dataini and :datafim and a.dt_cancelamento is
> null
>   ORDER BY a.co_associado
>
> Porém está dando a seguinte mensagem de erro:
>
> Invalid expression in the select list(not contained in either an aggregate
> function or the GROUP BY clause).
>
> Já tentei agrupar por várias formas e ainda não obtive sucesso.
>
> Alguém teria alguma idéia a respeito para solucionar essa questão???
> Uma vez que o objetivo é gerar uma relatório...
>
> Agradeço a todos desde de já!!!
>
> Abraços :D !!!
>
>
>


-- 
[]'s,

Hélio Oliveira
Analista de Sistemas
Delphi Developer
http://hpensador.blogspot.com/





Mais detalhes sobre a lista de discussão lista