Pergunta

Estou tendo problemas tentando classificar cada um dos nossos alunos, pelo grupo doméstico em que estão.

Exemplo de dados falso.

HomeGroup
1. Team RED
2. Team BLUE
3. Team Skeet
4. Team GREEN

Students
1. John, Score - 34, Team RED
2. Jill, Score - 87.3, Team RED
3. Fred, Score - 41, Team GREEN
4. Jane, Score 93, Team BLUE
...

etc.

A minha saída está no seguinte

Scores
StudentId 1, Score 34, Rank - 5th 
StudentId 2, Score 87.3, Rank - 1st 
StudentId 3, Score 41, Rank - 9th 
StudentId 4, Score 94, Rank - 1st.

Eu estou tentando usar DENSE_RANK .. e que funciona bem se eu executar este contra um único HomeGroup (ex. Grupo doméstico = 1) ... mas eu não tenho certeza de como fazê-lo sobre todos os grupos domésticos.

Eu estou supondo que eu preciso de uma consulta atualização, que tem uma subconsulta ... e este subconsulta tem seu próprio subconsulta ... ??

Eu estou muito confuso :( E eu fico pensando sobre cursores mal que se recusam a usar a menos que eu tenho uma arma na minha cabeça (porque eu acredito que pode ser tratada corretamente com a notação 'Set').

Foi útil?

Solução

Para obter o DENSE_RANK de cada aluno na equipa:

SELECT *, DENSE_RANK() OVER (PARTITION BY Team ORDER BY Score DESC)
   FROM Students;

Não é claro para mim o que você quer o UPDATE embora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top