Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

doido

Problema com INNER JOIN

Recommended Posts

Olá a todos

 

Estou com um problema ao tentar o INNER JOIN abaixo:

 

 

SELECT APAC.tipate,APAC.cdproc0 AS codigo,PROCEDIM.descricao AS procedimento,SUM(APAC.valor0) AS total,SUM(APAC.qtproc0)
AS qtde FROM APAC INNER JOIN PROCEDIM ON APAC.cdproc0 = PROCEDIM.codigo WHERE dtemi= "20130401" GROUP BY APAC.tipate,
APAC.cdproc0
Como podem ver, puxo os dados em sua maioria da tabela APAC, sendo que na mesma existe um código contido no campo cdproc0. A descrição desse código está na tabela PROCEDIM.
Essas tabelas são de um sistema existente que estou importando. O problema é que na tabela procedim existem alguns códigos duplicados e com descrições diferentes. Por exemplo
Tabela APAC
Registro 1: cdproc0 = "12"
Tabela PROCEDIM
Registro 1: codigo = "12" descricao="descricao1"
Registro 2: codigo = "13" descricao="descricao2"
Nesses casos, mesmo com o GROUP BY, o INNER JOIN mostra duas vezes o registro 1 da tabela APAC, uma vez com referencia para o registro1 da tabela PROCEDIM e outra com referencia ao registro 2 da tabela PROCEDIM.
Não estou conseguindo travar isso. Quero que nesses casos ele não duplique, mostrando apenas 1 vez o registro 1 da TABELA APAC, fazendo referencia com o Registro 1 da tabela PROCEDIM.
Desde já agradeço a atenção

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

12 é diferente de 13, creio que seria 12 e 12 , não ?

 

Há mais alguma coluna que desempate esre join ?

 

A melhor solução (caso não) seria corrigir a tabela.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

12 é diferente de 13, creio que seria 12 e 12 , não ? Há mais alguma coluna que desempate esre join ? A melhor solução (caso não) seria corrigir a tabela.

Foi mal... 12 = 12... realmente. Quanto a questão de corrigir a tabela, é como falei, estou convertendo um sistema clipper, são muitos dados. Fica inviável corrigir.

 

Alguém sugere alguma solução??? Pois estou encontrando problemas similares em outras junções. Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas tendo duas descrições como definir a correta ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas tendo duas descrições como definir a correta ?!

Bem colocado! Em quase sua totalidade, as descrições são sinônimos, portanto defina sempre a primeira da lista a ser achada. No caso do exemplo, o registro 1 da tabela PROCEDIM.

 

Com isso não terei que achar os milhares de duplicatas que tem ao longo dessas tabelas, e aos poucos, havendo reclamação de descrições incorretas (em caso de não serem sinônimos) eu vou eliminando aos poucos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

COM MAX TALVEZ ...

SELECT APAC.tipate,APAC.
       cdproc0 AS codigo,
       PROCEDIM.descricao AS procedimento,
       SUM(APAC.valor0) AS total,
       SUM(APAC.qtproc0) AS qtde
FROM APAC
  INNER JOIN PROCEDIM ON APAC.cdproc0 = PROCEDIM.codigo
WHERE dtemi= "20130401"
AND PROCEDIM.descricao = (SELECT MAX(PROCEDIM2.descricao)  
                          FROM PROCEDIM PROCEDIM2
                          WHERE PROCEDIM2.codigo = PROCEDIM.codigo)

GROUP BY APAC.tipate,

 


Compartilhar este post


Link para o post
Compartilhar em outros sites

COM MAX TALVEZ ...

SELECT APAC.tipate,APAC.
       cdproc0 AS codigo,
       PROCEDIM.descricao AS procedimento,
       SUM(APAC.valor0) AS total,
       SUM(APAC.qtproc0) AS qtde
FROM APAC
  INNER JOIN PROCEDIM ON APAC.cdproc0 = PROCEDIM.codigo
WHERE dtemi= "20130401"
AND PROCEDIM.descricao = (SELECT MAX(PROCEDIM2.descricao)  
                          FROM PROCEDIM PROCEDIM2
                          WHERE PROCEDIM2.codigo = PROCEDIM.codigo)

GROUP BY APAC.tipate,

 

 

 

Matou a pau veio!!!!! Vlw mesmo... tópico resolvido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, mas se quer um conselho arrume a tabela, o max é um paliativo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.