Bom dia a todos, estou com um pequeno problema que não estou encontrando uma soluçao.
O problema é o seguinte:
Minha sql retorna alguns campos nos quais 2 deles são count, o problema é que como os campos tem uma relação um com o outros ele ta dobrando o valor do count.
Segue sql:
SELECT F.MATRICULA, VFI.QTD_AUTORIZACAO, AG.AGENTECONS_ID, V.VERBA_ID, F.FUNCIONARIO_ID, COUNT(MC.MATRICULA) AS QTD_LANCAMENTOS, COUNT(DISTINCT RV.RESERVA_MARGEM_ID) AS QTD_RESERVAS
FROM MOVIMENTO_CARTAO_TEMP MC
JOIN FUNCIONARIO F ON F.MATRICULA = MC.MATRICULA
JOIN AGENTECONS AG ON AG.REFERENCIA = MC.REFERENCIA_AGENTE
JOIN VW_FOLHA_ITENS VFI ON VFI.FUNCIONARIO_ID = F.FUNCIONARIO_ID AND VFI.TIPO_VERBA = 'CARTAO' AND VFI.AGENTECONS_ID = AG.AGENTECONS_ID
JOIN VERBA V ON V.AGENTECONS_ID = AG.AGENTECONS_ID AND V.TIPO_VERBA = 'CARTAO'
JOIN RESERVAMARGEM RV ON RV.FUNCIONARIO_ID = F.FUNCIONARIO_ID AND RV.AGENTECONS_ID = AG.AGENTECONS_ID AND RV.SITUACAO = 0
WHERE MC.HST_CARGA_DADOS_ID = 206 AND VFI.FOLHA_ID = 176
GROUP BY F.MATRICULA, VFI.QTD_AUTORIZACAO, AG.AGENTECONS_ID, F.FUNCIONARIO_ID, V.VERBA_ID
HAVING COUNT(MC.MATRICULA) >= COUNT(distinct RV.RESERVA_MARGEM_ID);
Resultado desta consulta:
MATRICULA||
1733940/1-00 |
2 |
4 |
2 |
QTD_AUTORIZACAO ||
1268678/1-00 |
4 |
2 |
2 |
QTD_CANCAMENTOS||
290912/1-00 |
2 |
1 |
1 |
QTD_RESERVAS
520004/1-01 |
1 |
1 |
1 |
Conforme mostrado na tabela o problema consiste no seguinte:
os valores do campo qtd_lancamentos estão duplicados, pois para cada valor no cammpo qtd_reserva ele esta dobrando o valor do campo qtd_lancamentos.
ex: tenho um unico lançamento, porem tenho duas reservas, neste caso o resultado da consulta vai me retornar dois lançamentos e duas reservas.
isso ocorre pelo fato de ter duas reservas na mesma matricula e tenho um unico lançamento, porem com o join ele duplica o lançamento para cada reserva.
O que posso fazer para evitar isso?
O resultado esperado é:
Qtd_lancamentos
2
1
1
1
na mesma ordem da tabela anterior.