Fórum montar consulta com 3 tabelas #387471
28/09/2010
Boa tarde Amigos,
estou enfrentando a seguinte dificuldade em uma consulta, tenho 3 tabelas (TABEx_1, TABEx_2, TABMed) com a seguinte estrutura
TabEX_1
CRM
Cod_TABMED
Nome
TABEX_2
CRM
Cod_CRM
Nome
TABMED
CRM
CODIGO
PRECISO exibir a Soma de CRM encontrado nas Tabelas TABEX_1 e TABEX_2 e o nome que consta na TABMED.
COUNT(TABEX_1.CRM) - COUNT(TABEX_2.CRM) - TABMED.NOME
10 0 FULANO
2 5 BELTRANO
4 1 CICLANO
Minha consulta esta assim:
select count(TABEX_1.CRM) as QTDE_1, count(TABEX_2.CRM) as QTDE_2, TABMED.NOME from TABMED
left join TABEX_1 on TABMED.CRM = TABEX_1.CRM and TABEX_1.Cod_TABMED = TABMED.CODIGO
left join TABEX_2 on TABMED.CRM = TABEX_2.CRM and TABEX_2.Cod_TABMED = TABMED.CODIGO
group by TABMED.NOME
Obrigado !!!!
Posts
28/09/2010
Eriley Barbosa
E o que não ta funcionando, qual o resultado esperado explique melhor seu problema, cuidado você está com mais de uma condição no left:
select count(TABEX_1.CRM) as QTDE_1, count(TABEX_2.CRM) as QTDE_2, TABMED.NOME from TABMED
left join TABEX_1 on (TABMED.CRM = TABEX_1.CRM and TABEX_1.Cod_TABMED = TABMED.CODIGO)
left join TABEX_2 on (TABMED.CRM = TABEX_2.CRM and TABEX_2.Cod_TABMED = TABMED.CODIGO)
group by TABMED.NOME
28/09/2010
Ricardo Araujo
boa tarde,
Amigo você pode monta o diagrama do banco de dados, com seus relacionamento, assim fica mais fácil fazer o SQL para você.
não estou conseguindo o relacionamento que você esta fazendo!
28/09/2010
Ricardo Araujo
ignore a mensagem anterior.
Não estou conseguindo entender o que você precisa.
Amigo você pode monta o diagrama do banco de dados, com seu relacionamentos, assim fica mais fácil ajuda na montagem do SQL.
Estas suas tabelas estão meio confisas, explique melhor para poder lhe ajudar.
Aguardo retorno.
Pessoal estou com dificuldade de explicar mesmo, mas vamos lá......
Tenho 2 tabelas e preciso atraves de um periodo exibir no resultset a qtde de de vezes que o CRM é encontrado, com uma tabela eu consigo fazer a consulta perfeitamente.
Segue exemplo para uma tabela apenas:
Obs.
Os relacionamentos de dados entre a tabela medicos e tab1 dependem dos campos
Medicos Tab1
Codigo-----Codmedico
CRM---------CRM
Nome
Select count(tab1.crm), Medicos.Nome from Tab1
left join medicos on
medicos.crm = tab1.crm and medicos.codigo = tab1.codmedico
and tab1.data between :data1 and :data2
group by tab1.crm, medicos.nome
ai eu tenho um resultset assim:
Count_tab1 NOME
10 Fulano1
5 Fulano2
13 Fulano3
o problema entra agora, tenho tambem que exibir os dados da tab2 no mesmo resulset, os campos da tab2 sao identicos ao da tab1.
eu queria algo assim
Select count(tab1.crm),COUNT(TAB2), Medicos.Nome from Tab1
left join medicos on
medicos.crm = tab1.crm and medicos.codigo = tab1.codmedico
and tab1.data between :data1 and :data2
group by tab1.crm, medicos.nome
Veja se isto lhe ajuda
SELECT
( SELECT
COUNT(TAB1.CRM)
FROM
TAB1
WHERE
TAB1.CRM = med.CRM
AND TAB1.CodMedico = med.Codigo
AND TAB1.Data BETWEEN :data1 AND :data2
) AS Qtde1,
( SELECT
COUNT(TAB2.CRM)
FROM
TAB2
WHERE
TAB2.CRM = med.CRM
AND TAB2.CodMedico = med.Codigo
AND TAB2.Data BETWEEN :data1 AND :data2
) AS Qtde2,
med.Nome
FROM
MEDICOS med
Espero ter colaborado.
Maravilha Wilson, funcionou perfeitamente, agora só me da mais uma ajudinha, como faço para exibir no count apenas quando a qtde for maior que 50 (levando-se em conta que se o Tab1 for maior que 50 e o Tab2 menor deve ser exibido tb)
Abraços e Obrigado !!!
Veja se isto lhe ajuda
SELECT
( SELECT
COUNT(TAB1.CRM)
FROM
TAB1
WHERE
TAB1.CRM = med.CRM
AND TAB1.CodMedico = med.Codigo
AND TAB1.Data BETWEEN :data1 AND :data2
) AS Qtde1,
( SELECT
COUNT(TAB2.CRM)
FROM
TAB2
WHERE
TAB2.CRM = med.CRM
AND TAB2.CodMedico = med.Codigo
AND TAB2.Data BETWEEN :data1 AND :data2
) AS Qtde2,
med.Nome
FROM
MEDICOS med
Espero ter colaborado.
Funcionou Perfeitamente Wilson !!!
Utilize a cláusula HAVING
HAVING
Qtde1 > 50
OR Qtde2 > 50
Espero ter colaborado.
Utilize a cláusula HAVING
HAVING
Qtde1 > 50
OR Qtde2 > 50
Espero ter colaborado.
Onde devo colocar o Having ?
Utilize a cláusula HAVING
HAVING
Qtde1 > 50
OR Qtde2 > 50
Espero ter colaborado.
Wilson, tentei assim mas esta funcionando,
SELECT
( SELECT
COUNT(TAB1.CRM)
FROM
TAB1
WHERE
TAB1.CRM = med.CRM
AND TAB1.CodMedico = med.Codigo
AND TAB1.Data BETWEEN :data1 AND :data2
) AS Qtde1,
( SELECT
COUNT(TAB2.CRM)
FROM
TAB2
WHERE
TAB2.CRM = med.CRM
AND TAB2.CodMedico = med.Codigo
AND TAB2.Data BETWEEN :data1 AND :data2
) AS Qtde2,
med.Nome
FROM
MEDICOS med
HAVING ((Qtde1 > 50) or (Qtde2 > 50))
Se está funcioando, então está OK.
Se está funcioando, então está OK.
HEHEHEH, esqueci da palavra NÃO Wilson, não funciona o having ali
Ocorre erro de sintaxe? ou o que ocorre?
Ocorre erro de sintaxe? ou o que ocorre?
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).