Inquiridor
ajuda com query com agrupamentos

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 ContasPagasWHERE
ContasPagas.IdBeneficiario=Beneficiarios.IdTitular ) AS Titular,(
SELECT Sum(ContasPagas.VlrPago) FROM ContasPagasWHERE
ContasPagas.IdBeneficiario=Beneficiarios.IdBeneficiario) AS DependentesFROM
BeneficiariosGROUP
BY Beneficiarios.IdTitular, Beneficiarios.IdBeneficiario
Todas as Respostas
-
-
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 TotalFROM
a01_BeneficiariosORDER
BY IdTitular -
-
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 SnippetSELECT 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 TotalFROM
a01_BeneficiariosORDER
BY IdTitularVeja se agora funciona
[ ]s,
Gustavo
-
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?