[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