none
ajuda com query com agrupamentos RRS feed

  • Pergunta

  •  

    tenho uma tabela chamada beneficiarios, nela contem os campos idtitular e idbeneficiario e tenho outra tabela chamada contaspagas que contem o idbeneficiario(que pode ser o idtitular ou idbeneficiario).

     

    quero montar uma query para trazer por grupos de titulares o valor pago por eles e seus beneficiarios, ficaria assim.

     

    idtitular          Sum(ValorPago em ContasPagas) do idtitular         Sum(ValorPago em ContasPagas do idbeneficiario

    1                               100                                                                50

    2                                 0                                                                  100

     

     

    o que estou conseguindo é apenas as 2 primeiras colunas, quando incluo a segunda ele duplica os registros

     

     

     

    SELECT Beneficiarios.IdTitular AS IdTitular,

    (SELECT Sum(ContasPagas.VlrPago) FROM ContasPagas

    WHERE ContasPagas.IdBeneficiario=Beneficiarios.IdTitular ) AS Titular,

    (SELECT Sum(ContasPagas.VlrPago) FROM ContasPagas

    WHERE ContasPagas.IdBeneficiario=Beneficiarios.IdBeneficiario) AS Dependentes

    FROM Beneficiarios

    GROUP BY Beneficiarios.IdTitular, Beneficiarios.IdBeneficiario

    sábado, 26 de julho de 2008 14:46

Todas as Respostas

  • Olá Carlos,

     

    Como o SUM está dentro de uma Subquery, o GROUP BY é desnecessário na Query Externa.

    Retire o GROUP BY que eu acredito que dará certo.

     

    [ ]s,

     

    Gustavo

     

    sábado, 26 de julho de 2008 15:10
  • Caramba fico admiriado contigo Gustavo esta sempre por aqui ajudando.....

     

    Então eu consegui fazer, o problema agora é que preciso fazer as somas dos totais e quando é nulo alguma das colunas ele não soma, faz a soma só quando há dados nas 2 colunas.

     

    SELECT DISTINCT a01_Beneficiarios.IdTitular,

    (SELECT Sum(ContasPagas.VlrPago)

    FROM ContasPagas

    WHERE ContasPagas.IdBeneficiario=a01_Beneficiarios.IdTitular) AS Titular,

    (SELECT Sum(ContasPagas.VlrPago)

    FROM ContasPagas

    WHERE ContasPagas.IdBeneficiario=a01_Beneficiarios.IdBeneficiario

    AND ContasPagas.IdBeneficiario<>a01_Beneficiarios.IdTitular) AS Dependentes,

    CONVERT(FLOAT,

    (SELECT Sum(ContasPagas.VlrPago)

    FROM ContasPagas

    WHERE ContasPagas.IdBeneficiario=a01_Beneficiarios.IdTitular)

    )

    +

    CONVERT(FLOAT,

    (SELECT Sum(ContasPagas.VlrPago)

    FROM ContasPagas

    WHERE ContasPagas.IdBeneficiario=a01_Beneficiarios.IdBeneficiario

    AND ContasPagas.IdBeneficiario<>a01_Beneficiarios.IdTitular)

    ) as Total

     

     

    FROM a01_Beneficiarios

    ORDER BY IdTitular

    sábado, 26 de julho de 2008 15:33
  • bom o código é esse acima, mas preciso agrupar pela coluna IdTitular para que não duplique os registros, o DISTINCT não esta funcionando, ele repete os Titulares de acordo com o número de Dependentes

    sábado, 26 de julho de 2008 15:38
  • Olá Carlos,

     

    Esse mês andei trabalhando demais (estou no trabalho no momento) e aproveito as horas livres para ajudar. É sempre um prazer poder mostrar o caminho das pedras. Se somar o nulo é um problema, então façamos algumas adaptações:

     

    Code Snippet

    SELECT DISTINCT a01_Beneficiarios.IdTitular,

    (SELECT Sum(ContasPagas.VlrPago)

    FROM ContasPagas

    WHERE ContasPagas.IdBeneficiario=a01_Beneficiarios.IdTitular) AS Titular,

    (SELECT Sum(ContasPagas.VlrPago)

    FROM ContasPagas

    WHERE ContasPagas.IdBeneficiario=a01_Beneficiarios.IdBeneficiario

    AND ContasPagas.IdBeneficiario<>a01_Beneficiarios.IdTitular) AS Dependentes,

    ISNULL(CONVERT(FLOAT,

    (SELECT Sum(ContasPagas.VlrPago)

    FROM ContasPagas

    WHERE ContasPagas.IdBeneficiario=a01_Beneficiarios.IdTitular)

    ),0)

    +

    ISNULL(CONVERT(FLOAT,

    (SELECT Sum(ContasPagas.VlrPago)

    FROM ContasPagas

    WHERE ContasPagas.IdBeneficiario=a01_Beneficiarios.IdBeneficiario

    AND ContasPagas.IdBeneficiario<>a01_Beneficiarios.IdTitular)

    ),0) as Total

     

     

    FROM a01_Beneficiarios

    ORDER BY IdTitular

     

     

    Veja se agora funciona

     

    [ ]s,

     

    Gustavo

    sábado, 26 de julho de 2008 15:52
  • sim, agora resolveu a somatória.

     

    Sobre o fato de ele estar me retornando os registros de acordo com número de Titulares + Dependentes, sendo que eu quer agrupar por Titulares, ou seja são 19 registros que devo obter, sendo que estou obtendo 47 porque ele esta trazendo os dependentes também, mas os dependetes que saber apenas os gastos por titular

     

    onde estou errando no código acima?

    sábado, 26 de julho de 2008 16:05