Ir para conteúdo

POWERED BY:

Arquivado

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

Glauber Néspoli

Busca SQL separada por 'área'...

Recommended Posts

Bom dia. Então, tenho um banco da seguinte forma: há a tabela de candidatos cadastrados, áreas e subáreas.

Cada candidato poderia se inscrever entre 1 a 3 áreas, e cada área possui várias sub-áreas diferentes. Além disso, na tabela candidato, há um campo chamado atuação, sendo 1 pra instrutor daquela area/subarea, e 2 pra consultor. Logo, pode haver vários registros da mesma pessoa, cada um com uma combinação de área/sub-área/atuação diferente. Eis a estrutura das tabelas:

 

Imagem Postada

 

E um exemplo de registro, onde uma mesma pessoa está cadastrada em três áreas diferentes, tendo ainda sub-áreas e atuações para diferenciar:

 

Imagem Postada

 

Problema agora é que tenho que fazer a seguinte busca: trazer todos aqueles que estão cadastrados em apenas UMA área. Nessa primeira etapa, desconsidera-se atuação, logo ela foi tirada fora da consulta. A seguinte busca retorna todos:

 

SELECT LEFT(c.num_inscricao, 11) AS NUMERO_INSCRICAO, c.nome_candidato AS NOME_INSCRITO, a.nome_area as AREA_INDICADO, sa.nome_subarea as SUBAREA_INDICADO
FROM 10candidatos c INNER JOIN 10areas a ON c.id_area = a.id_area
INNER JOIN 10subareas sa ON a.id_area = sa.id_area
WHERE c.num_subarea = sa.num_subarea
AND c.credenciado = 0
GROUP BY NOME_INSCRITO, AREA_INDICADO, SUBAREA_INDICADO
ORDER BY NOME_INSCRITO, AREA_INDICADO, SUBAREA_INDICADO

Com essa consulta será gerado um .xls com a relação, mas tenho que separar apenas quem tá inscrito em apenas UMA área..

 

Tentei coisas do tipo:

AND COUNT(DISTINCT c.id_area) = 1
Mas ao tentar usar count, com ou sem distinct, retornava um erro no GROUP.

 

Estou precisando disso urgente.. alguém tem uma solução?

 

[]'s

Glauber

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, não sei se ajuda bem.. seria similar a eu fazer uma busca de quem é da área 1 ou 2, ou área 3 E 7, mas não é bem isso que eu quero. Há pessoas no banco com apenas uma área (exemplo, área 2) e NESSA área, ter várias sub-áreas, do tipo (area-subarea-atuacao): 2-1-1, 2-1-2, 2-4-1, 2-5-2, 2-7-1, 2-7-2. Nesse exemplo, a pessoa tem 6 registros no banco, porém ela só participa de uma área. Ela tem que aparecer no meu select. Um outro exemplo, um cara que tem dois registros, um 3-5-1 e 4-7-2, já participa de duas áreas diferentes, logo ele não apareceria. E isso não seria pra áreas específicas, mas percorrendo todos os registros, e trazendo aqueles que tem apenas uma área.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usuários com 1 área

 

SELECT ID
FROM AREAS
GROUP BY ID
HAVING COUNT(ID) = 1

lISTA DESTES USUÁRIOS

SELECT *
FROM USUARIOS
WHERE ID IN (SELECT ID
             FROM AREAS
             GROUP BY ID
             HAVING COUNT(ID) = 1)

Simplificado, mas a ideia básica é esta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, valeu pela ajuda, mas ainda assim não funcionou. Tentei ontem exatamente da forma que você passou (utilizando os campos da minha tabela, obviamente), mas continou trazendo exatamente os mesmos resultados da consulta que eu postei.

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.