Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
SQL [Resolvido]
01-04-2010, 09:31 (Esta mensagem foi modificada pela última vez a: 01-04-2010 11:06 por progster.)
Mensagem: #1
SQL [Resolvido]
Bom dia.

Estou a desenvolver uma BD e surgiu-me uma situação que não estou a conseguir resolver. É o seguinte:
Tenho um bloco de código em SQL, cujo output em termos de dados dá-me aquilo que quero, só que preciso que esse output me seja dado de outra maneira ou seja:

SELECT [Registo de Clientes].Nome, [Registo de Clientes].Idade, [Registo de Clientes].[Habilitações Literarias], [Registo de Clientes].Sexo, [Registo de Clientes].[1º Emprego], [Registo de Clientes].[Novo Emprego], [Registo de Clientes].Outros FROM [Registo de Clientes]
WHERE ((([Registo de Clientes].Idade) Like "*" & [Introduza a idade] & "*") AND (([Registo de Clientes].[Habilitações Literarias]) Like "*" & [Introduza as HL] & "*") AND (([Registo de Clientes].Sexo) Like "*" & [Introduza o Sexo] & "*"));

Isto dá-me aquilo que quero relativamente aos dados, mas o que eu quero é que através de uma funcção COUNT, saber o número de pessoas que correspondem a este output. Agora a questão é como é que faço isso e onde é que meto o SELECT COUNT

Desde já agradeço qualquer ajuda que me possam dar.

Cumprimentos.

Progster
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
01-04-2010, 09:37
Mensagem: #2
RE: SQL
O que pretendes é o número distinct de pessoas retornadas pelo Output?

No Select acima indicado há repetições de pessoas?
Se não houver podes facilmente ver isso pelo RecordCount retornado.

Se houverem duplicações de pessoas no Select acima, podes e deves fazer um DISTINCT [Registo de Clientes].Nome
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
01-04-2010, 09:42 (Esta mensagem foi modificada pela última vez a: 01-04-2010 09:44 por progster.)
Mensagem: #3
RE: SQL
Exactamente. Aquilo que eu quero é saber o nº de pessoas retornadas pelo output.

Não sei se percebi o que queres dizer com o recordcount.

Já agora esqueçi-me de referir no primeiro tópico, que a plataforma que estou a utilizar é o access 2003.

Progster
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
01-04-2010, 09:43 (Esta mensagem foi modificada pela última vez a: 01-04-2010 09:45 por aucrun.)
Mensagem: #4
RE: SQL
De qualquer forma acho que o que pretendes é mais algo do género seguinte, que vai-te retornar apenas as pessoas únicas que preenchem os requisitos (no entanto se tivesses um campo COD_PESSOA seria melhor, pois o NOME_PESSOA está sujeito a duplicações):

"SELECT DISCTINCT [Registo de Clientes].Nome FROM [Registo de Clientes]
WHERE ((([Registo de Clientes].Idade) Like "*" & [Introduza a idade] & "*") AND (([Registo de Clientes].[Habilitações Literarias]) Like "*" & [Introduza as HL] & "*") AND (([Registo de Clientes].Sexo) Like "*" & [Introduza o Sexo] & "*"))
GROUP BY [Registo de Clientes].Nome"


Entretanto, se trabalhares com Visual Studio ou algo do género, e tiveres acesso a Datatables podes trabalhar os dados a partir do RecordSet retornado com o uso das Datatables.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
01-04-2010, 09:45 (Esta mensagem foi modificada pela última vez a: 01-04-2010 10:03 por progster.)
Mensagem: #5
RE: SQL
Obrigado, vou testar e já digo alguma coisa.
Funcionou, mas o output que me retorna é só os nomes das pessoas.

O que eu queria era o Número de pessoas.

Progster
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
01-04-2010, 10:09
Mensagem: #6
RE: SQL
"SELECT DISCTINCT (count([Registo de Clientes].Nome FROM [Registo de Clientes]))
WHERE ((([Registo de Clientes].Idade) Like "*" & [Introduza a idade] & "*") AND (([Registo de Clientes].[Habilitações Literarias]) Like "*" & [Introduza as HL] & "*") AND (([Registo de Clientes].Sexo) Like "*" & [Introduza o Sexo] & "*"))
GROUP BY [Registo de Clientes].Nome"

e assim?
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
01-04-2010, 10:17 (Esta mensagem foi modificada pela última vez a: 01-04-2010 10:25 por progster.)
Mensagem: #7
RE: SQL
Ainda não está a dar.
SELECT COUNT ([Registo de Clientes].Nome) AS [*Número de pessoas*]
FROM [Registo de Clientes]
WHERE ((([Registo de Clientes].Idade) Like "*" & [Introduza a idade] & "*") AND (([Registo de Clientes].[Habilitações Literarias]) Like "*" & [Introduza as HL] & "*") AND (([Registo de Clientes].Sexo) Like "*" & [Introduza o Sexo] & "*"))
GROUP BY [Registo de Clientes].Nome;

Deste modo já me está a dar qualquer coisa, ou seja, como ainda tenho a BD em fase de desenvolvimento, testei com 3 registos ficticios e para o output esperado que seria o valor "2", aparecem-me duas linhas com o valor "1".

Progster
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
01-04-2010, 10:30
Mensagem: #8
RE: SQL
e se fizeres primeiro o count e depois o distinct?
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
01-04-2010, 10:32 (Esta mensagem foi modificada pela última vez a: 01-04-2010 10:32 por progster.)
Mensagem: #9
RE: SQL [Resolvido]
SELECT COUNT([Registo de Clientes].Nome) AS [*Número de pessoas*]
FROM [Registo de Clientes]
WHERE ((([Registo de Clientes].Idade) Like "*" & [Introduza a idade] & "*") AND (([Registo de Clientes].[Habilitações Literarias]) Like "*" & [Introduza as HL] & "*") AND (([Registo de Clientes].Sexo) Like "*" & [Introduza o Sexo] & "*"));

Assim já me dá o valor que eu quero.

Obrigado.

Cumprimentos.

Progster
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
01-04-2010, 10:55
Mensagem: #10
RE: SQL
Só um pequeno detalhe.. Não dês nomes às Tabelas e aos Campos com espaços e/ou caracteres especiais "ç,õ,ã", etc.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 3 Visitante(s)