[SQL SERVER] LEFT JOIN repetindo resultados
11/05/2017
0
Procurei inúmeras vezes uma solução para este problema, mas não encontrei especificamente uma solução.
Tenho uma consulta que busca valores em 3 tabelas diferentes, quando ela encontra duas linhas em uma das tabelas, as outras tabelas tem seus valores duplicados. Por exemplo.
SELECT A.identificador, SUM(B.campo1) + SUM(C.campo2) + SUM(D.campo3) FROM tabela_principal as A LEFT JOIN tabela1 AS B ON B.identificador = A.identificador LEFT JOIN tabela2 AS C ON D.identificador = A.identificador LEFT JOIN tabela3 AS D ON C.identificador = A.identificador
Já tentei substituir o LEFT JOIN por um SUB SELECT (SELECT SUM(A.campo1) FROM tabela 1 AS B WHERE B.identificador = A.identificador), o que soluciona em partes meu problema, mas depois eu não consigo fazer GROUP BY.
Eu precisava relacionar estas tabelas de forma que eu pudesse fazer agrupamentos, de qual forma seria mais eficiente?
Obrigado a todos.
Alan Luna
Post mais votado
11/05/2017
SELECT IDENTIFICADOR, SUM(CAMPO1), SUM(CAMPO2), SUM(CAMPO3), FROM ( SELECT A.identificador AS IDENTIFICADOR, B.campo1 AS CAMPO1, C.campo2 AS CAMPO2, D.campo3 AS CAMPO3 FROM tabela_principal as A LEFT JOIN tabela1 AS B ON B.identificador = A.identificador LEFT JOIN tabela2 AS C ON D.identificador = A.identificador LEFT JOIN tabela3 AS D ON C.identificador = A.identificador ) AS CTE GROUP BY IDENTIFICADOR
Fabio Parreira
Mais Posts
11/05/2017
Emerson Nascimento
SELECT A.identificador, (select SUM(B.campo1) from tabela1 AS B ON B.identificador = A.identificador) campo1, (select SUM(C.campo2) from tabela2 AS C ON C.identificador = A.identificador) campo2, (select SUM(D.campo3) from tabela3 AS D ON D.identificador = A.identificador) campo3 FROM (select distinct identificador from tabela_principal) as A
24/07/2017
Alan Luna
Peço desculpa pela demorar para retornar, tive alguns problemas de hardware.
Sobre minha questão, agradeço a todos, demorei um pouco pra entender as subquerys.
Pelo que entendi, minha solução seria criar uma primeira consulta para depois pesquisar sobre os resultados encontrados.
Ex.
SELECT * FROM --SELECT 2 (SELECT * FROM A --SELECT 1) WHERE ... GROUP BY ...
Desta forma, primeiro ele obtém a primeira consulta e, logo em seguida, realiza uma consulta com os resultados da primeira.
Consegui resolver o meu problema. Muito obrigado a todos.
Clique aqui para fazer login e interagir na Comunidade :)