CONTAR REGISTROS COM SQL

PAULOHSV 18/10/2016 10:14:22
#468163
Bom dia pessoal, quanto tempo não passava por aqui.

Mas vamos lá.
Me solicitaram a montagem de um relatório em sistema de analises clinicas que não era atualizado a uns 4 anos.
Este sistema grava o resultado dos exames em várias tabelas, e o pessoal precisa saber quem fez exame e a quantidade de exames realizados por paciente.
Então montei minha SQL da seguinte maneira:

Citação:

SQL = [Ô]SELECT DISTINCT A.NOME_PACIENTE, COUNT(A.ID_PACIENTE) AS SOMATOTAL from (((CAD_PACIENTE A FULL OUTER JOIN RESULTADOS1 B ON A.ID_PACIENTE=B.COD_PACIENTE)FULL OUTER JOIN RESULTADOS2 C ON A.ID_PACIENTE=C.COD_PACIENTE) FULL OUTER JOIN URINA D ON A.ID_PACIENTE=D.COD_PACIENTE)[Ô]
SQL = SQL + [Ô] GROUP BY A.NOME_PACIENTE[Ô]



Porém neste caso ele esta desprezando os registros da tabela URINA, contanto somente os registros das tabelas RESULTADOS1 e RESULTADOS2.

Alguém poderia me ajudar a identificar o erro? Ou se existe alguma outra forma dele contar estes registros?
DS2T 18/10/2016 20:00:22
#468185
Eu faria um Union All entre as tabelas de Resultado e Urina... depois faria a junção com a tabela de Pacientes.
Pela sua lógica, acredito que até daria certo... se não houvesse interseções entre as tabelas de Resultado e Urina (O mesmo paciente não tenha feito as duas). Do jeito que tá, acho que ele tá contando apenas uma vez os dois registros. é bem provável que a diferença esteja aí.
PAULOHSV 21/10/2016 10:39:55
#468278
Obrigado pelo resposta, também creio que seja isto que está acontecendo.
Se eu usar o INNER JOIN ele até conta certo, mas para isto o paciente teria que estar em todas as tabelas.

Vou tentar com o Union All.
Obrigado pela dica.
PAULOHSV 25/10/2016 12:49:03
#468386
Boa tarde.

Após a dica do colega acima, comecei e trabalhar a consulta e não obtive nenhum resultado satisfatório.

Quando utilizo o Union All, ele coloca tipo os somatório dos exames na mesma coluna do nome dos pacientes.

A instrução a seguir foi a mais próxima de um resultado, pois esta contanto certo porem com o problema que eu descrevi anteriormente.

Citação:

SQL = SQL + [Ô]SELECT DISTINCT A.NOME_PACIENTE from (CAD_PACIENTE A FULL OUTER JOIN RESULTADOS1 B ON A.ID_PACIENTE=B.COD_PACIENTE)[Ô]
SQL = SQL + [Ô]UNION [Ô]
SQL = SQL + [Ô] SELECT COUNT(*) AS SOMATOTAL from (RESULTADOS1 B FULL OUTER JOIN RESULTADOS2 C ON B.COD_PACIENTE=C.COD_PACIENTE) GROUP BY B.COD_PACIENTE[Ô]



Alguém saberia me dizer onde estou errando? Ou se existe alguma outra forma de contar quantos exames cada paciente fez em mais de uma tabela?

Abraços...
Tópico encerrado , respostas não são mais permitidas