Pular para o conteúdo
  • Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 8 anos, 9 meses atrás por Avatar de Cesar HunningCesar Hunning.
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #108019
    Avatar de pablo joaquimpablo joaquim
    Participante

      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||

      QTD_AUTORIZACAO ||

      QTD_CANCAMENTOS||

      QTD_RESERVAS

      1733940/1-00 2 4 2
      1268678/1-00 4 2 2
      290912/1-00 2 1 1
      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.

      #108037
      Avatar de Cesar HunningCesar Hunning
      Participante

        Olá!
        Notei que no count do qtd_lancamentos não usaste o distinct.

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.
      plugins premium WordPress