locked
Consultas RRS feed

  • Pergunta

  • Nas consultas abaixo, a única diferença entre elas foi que na consulta 2 , acrescentei a T_NSServicosExec onde são registrados os serviços executados para cada registro da T_NS. O relacionamento entre elas é 1 para muitos.

    O resultado da Sum(T_NS.USReal) AS USReal é diferente em cada consulta, apesar do valor somado estar presente apenas na tabela T_NS.


    O que pude observar foi que a consulta 2 está multiplicando o valor a ser somado pelo número (quantidade) de serviços executados para cada registro.Ex: Se o Valor a ser somado = 2,00 e a quantidade de serviços = 3, soma (2,00 * 3), ou seja, 6,00 quando o correto seria apenas 2,00

    Já tentei solucionar de várias maneiras, porém sem sucesso. Se alguém puder me ajudar, desde já eu agradeço.

    Consulta 1:

    Code Snippet

    SELECT DISTINCTROW T_TipoEquipe.TipoEquipe AS Processo, T_Empreiteiras.Empreiteira, Format$([T_NS].[DTConclusao],'yyyy') AS Ano, Sum(T_NS.USReal) AS USReal
    FROM T_Empreiteiras RIGHT JOIN (T_NS LEFT JOIN T_TipoEquipe ON T_NS.CodTequipe = T_TipoEquipe.CodTEquipe) ON T_Empreiteiras.Codigo = T_NS.CodEmpreiteira
    WHERE (((T_NS.CodSituacao)=4 Or (T_NS.CodSituacao)=8) AND ((T_NS.CodTequipe)=18 Or (T_NS.CodTequipe)=19))
    GROUP BY T_TipoEquipe.TipoEquipe, T_Empreiteiras.Empreiteira, Format$([T_NS].[DTConclusao],'yyyy'), Year([T_NS].[DTConclusao])
    HAVING (((Year([T_NS].[DTConclusao]))>=2004))
    ORDER BY Format$([T_NS].[DTConclusao],'yyyy');

     

     


    Consulta 2:

    Code Snippet
    SELECT DISTINCTROW T_TipoEquipe.TipoEquipe AS Processo, T_Empreiteiras.Empreiteira, Format$([T_NS].[DTConclusao],'yyyy') AS Ano, Sum(T_NS.USReal) AS USReal, Sum(T_NSServicosExec.Quantidade) AS Qtde
    FROM T_Empreiteiras RIGHT JOIN ((T_NS LEFT JOIN T_TipoEquipe ON T_NS.CodTequipe = T_TipoEquipe.CodTEquipe) INNER JOIN T_NSServicosExec ON T_NS.NumeroNS = T_NSServicosExec.NúmeroNS) ON T_Empreiteiras.Codigo = T_NS.CodEmpreiteira
    WHERE (((T_NS.CodSituacao)=4 Or (T_NS.CodSituacao)=8) AND ((T_NS.CodTequipe)=18 Or (T_NS.CodTequipe)=19) AND ((T_NSServicosExec.CódServiço)=16) AND ((T_NSServicosExec.CódComponente)=3))
    GROUP BY T_TipoEquipe.TipoEquipe, T_Empreiteiras.Empreiteira, Format$([T_NS].[DTConclusao],'yyyy'), Year([T_NS].[DTConclusao])
    HAVING (((Year([T_NS].[DTConclusao]))>=2004))
    ORDER BY Format$([T_NS].[DTConclusao],'yyyy');

     

     

    quarta-feira, 22 de outubro de 2008 15:20