Usuário com melhor resposta
COMANDO SQL - SQL TOP

Pergunta
-
Bom dia,
Tenho uma tabela onde gravo o nome do candidato, o seu partido e a quantidade de votos recebidos
Para selecionar os dados dos melhores classificados em ordem votos executo o comando abaixo:
SELECT TOP 20 nomeCandidato, nomePartido, votos
FROM votacao
ORDER BY votos asc
Gostaria de saber, como exibo, por exemplo, em que posição ficou determinado candidato?
Obrigado
Dilson
Respostas
-
OK - Willima,
Mas se eu quiser exibir a posição em que ficou o candidato x, somente, por exemplo?
Dilson
Dilson,
Adicione esta consulta indicada pelo William em um CTE e então use uma cláusula WHERE. Segue o complemento do script:
WITH Candidatos AS ( SELECT TOP 20 nomeCandidato, nomePartido, votos,
RANK() OVER (ORDER BY votos asc) as posicao FROM votacao ORDER BY votos asc ) SELECT * FROM Candidatos WHERE nomeCandidato = 'José da Silva'Não esqueça de marcar como resposta todos os posts que ajudaram na solução !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta William John Adam Trindade terça-feira, 14 de outubro de 2014 13:28
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 14 de outubro de 2014 18:01
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 14 de outubro de 2014 18:01
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 14 de outubro de 2014 18:01
-
Use o metodo RANK
http://msdn.microsoft.com/pt-br/library/ms176102.aspx
exemplo:
SELECT TOP 20 nomeCandidato, nomePartido, votos, RANK() OVER (ORDER BY votos asc) as posicao FROM votacao ORDER BY votos asc
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Sugerido como Resposta Mr. GMSOFT terça-feira, 14 de outubro de 2014 12:32
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 14 de outubro de 2014 18:01
Todas as Respostas
-
Use o metodo RANK
http://msdn.microsoft.com/pt-br/library/ms176102.aspx
exemplo:
SELECT TOP 20 nomeCandidato, nomePartido, votos, RANK() OVER (ORDER BY votos asc) as posicao FROM votacao ORDER BY votos asc
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Sugerido como Resposta Mr. GMSOFT terça-feira, 14 de outubro de 2014 12:32
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 14 de outubro de 2014 18:01
-
-
Nao entendi.. voce pode me dar um exemplo do que vc quer fazer?
Pelas informaçoes que vc nos deu, eu imagino que vc tenha algo como
Jose 2000 Votos PPP 1
Maria 1000 votos PIP 2
Ana 950 votos PAP 3
ZeGuede 50 votos POP 4
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam Trindade terça-feira, 14 de outubro de 2014 13:00
-
OK - Willima,
Mas se eu quiser exibir a posição em que ficou o candidato x, somente, por exemplo?
Dilson
Dilson,
Adicione esta consulta indicada pelo William em um CTE e então use uma cláusula WHERE. Segue o complemento do script:
WITH Candidatos AS ( SELECT TOP 20 nomeCandidato, nomePartido, votos,
RANK() OVER (ORDER BY votos asc) as posicao FROM votacao ORDER BY votos asc ) SELECT * FROM Candidatos WHERE nomeCandidato = 'José da Silva'Não esqueça de marcar como resposta todos os posts que ajudaram na solução !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta William John Adam Trindade terça-feira, 14 de outubro de 2014 13:28
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 14 de outubro de 2014 18:01
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 14 de outubro de 2014 18:01
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 14 de outubro de 2014 18:01
-
Boa tarde,
Só para complementar, também pode ser o caso de remover a clausula Top (e com isso o Order By após o From), pois acredito que podem existir mais de um candidato com a mesma quantidade de votos (ex: 3 candidatos na vigésima posição).
Espero que seja útil.
Assinatura: http://www.imoveisemexposicao.com.br
-
Bom dia,
Apenas um complemento nas respostas que foram dadas é caso ocorra um empate na votação os registros que estiverem empatado serão descartados o que é errado já que houve um empate, por isso, indico que também use a clausula WITH TIES.
Exemplo:
SELECT TOP(20) WITH TIES CAMPO1, CAMPO2 FROM TABELA ORDER BY CAMPO1 DESC;
Link's úteis:
http://msdn.microsoft.com/pt-BR/library/ms189463.aspx
http://www.diegonogare.net/2012/07/aprimorando-o-resultado-da-consulta-com-top-with-ties-no-sql-server-2012/
Atenciosamente,
Ruberlei.
Atenciosamente, Ruberlei. www.t-sql.com.br