SUM + DISTINCT recuperando valores errados

1. SUM + DISTINCT recuperando valores errados

Kauan Mocelin
kauanmocelin

(usa Outra)

Enviado em 12/05/2016 - 17:22h

Boa tarde, estou com problemas para fazer uma soma de valores agrupando.
Tenho os seguintes dados:

cod_referencia_pagamento|mes_referencia|ano_referencia|cod_pagamento_doc_fiscal|valor_documento
11479 3 2016 29254 7,528.46
12705 4 2016 33078 5,799.98
6425 7 2015 15764 1,392.1
6425 7 2015 15763 1,892.02
6240 9 2015 15369 1,774.11
6240 9 2015 15368 1,090.38
6240 9 2015 15370 253.53

Preciso fazer a soma da coluna valor_documento agrupando pelo mes referencia.
Exemplo:
cod_referencia_pagamento mes_referencia ano_referencia cod_pagamento_doc_fiscal soma_documentos
6425 7 2015 15763 3284,12

Quando tentei fazer a soma usando este código: SUM(pagamentoDocFiscal.valor_documento) as valorTotalDocumentosPrevisaoPagamento, os valores não batem, por exemplo o valor_documento do cod_referencia_pagamento = 12705 foi para 11599,96

Desculpem pela formatação, mas o editor do forum nao permite identar o código.


  


2. Re: SUM + DISTINCT recuperando valores errados

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 12/05/2016 - 18:13h

Se entendi, ocorreu algum problema no agrupamento. Exemplo:


SELECT
cod_referencia_pagamento
,SUM(valor_documento) AS valor_total_documentos_previsao_pagamento
,mes_referencia
,ano_referencia
,COUNT(*) AS soma_documentos
FROM
pagamento_doc_fiscal
GROUP BY
cod_referencia_pagamento
,ano_referencia
,mes_referencia
ORDER BY
ano_referencia
,mes_referencia
,cod_referencia_pagamento


[]'s
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
https://perspicazsite.wordpress.com


3. Re: SUM + DISTINCT recuperando valores errados

Kauan Mocelin
kauanmocelin

(usa Outra)

Enviado em 13/05/2016 - 08:49h

Minha query está assim:

SELECT DISTINCT
referenciaPagamento.cod_referencia_pagamento,
referenciaPagamento.mes_referencia,
referenciaPagamento.ano_referencia,
COUNT(*) as qtd_doc,
SUM(pagamentoDocFiscal.valor_documento) as valorTotalDocumentosPrevisaoPagamento
FROM
tb_referencia_pagamento referenciaPagamento
LEFT JOIN tb_contrato_orgao contratoOrgao
ON referenciaPagamento.cod_contrato_orgao = contratoOrgao.cod_contrato_orgao
LEFT JOIN tb_contrato contrato
ON contratoOrgao.cod_contrato = contrato.cod_contrato
LEFT JOIN tb_pagamento_empenho pagamentoEmpenho
ON pagamentoEmpenho.cod_referencia_pagamento = referenciaPagamento.cod_referencia_pagamento
LEFT JOIN tb_pagamento_doc_fiscal pagamentoDocFiscal
ON pagamentoDocFiscal.cod_referencia_pagamento = referenciaPagamento.cod_referencia_pagamento
WHERE
referenciaPagamento.ind_ativo = 1
AND contrato.num_contrato = 1607
AND contrato.ano = 2015
AND contratoOrgao.cod_status = 48010
GROUP BY
referenciaPagamento.cod_referencia_pagamento,
referenciaPagamento.ano_referencia,
referenciaPagamento.mes_referencia


Para o cod_referencia_pagamento = 12705, na coluna qtd_doc está vindo o valor: 2, porém deveria vir somente um registro.

Debuguei a query e verifiquei que esse problema de duplicar as tuplas ocorre nesse último join: LEFT JOIN tb_pagamento_doc_fiscal pagamentoDocFiscal. Quando aplico o DISTINCT as linhas repetidas param de aparecer, porém o SUM parece desconsiderar isso e soma todas elas erroneamente.


4. Re: SUM + DISTINCT recuperando valores errados

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 13/05/2016 - 11:27h

No primeiro exemplo não havia duplicidade por conta da coluna cod_pagamento_doc_fiscal. Neste segundo parece que é uso do DISTINCT a embaralhar a query. Evite trabalhar na dúvida, reveja os relacionamentos das suas tabelas, primary key/foreign key e se de fato não existe certeza de que os registros da tabela tb_referencia_pagamento podem não existir nas demais. Você pode também testar fazendo um select que retorne todos os registros sem agregação alguma e depois aplicar um outro select sobre o primeiro agrupando os valores e validando a saída.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts