1

我在尝试按每个学生所在的家庭组对每个学生进行排名时遇到了麻烦。

假数据示例。

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
...

等等

我的输出如下

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.

我正在尝试使用 DENSE_RANK .. 如果我对单个家庭组(例如家庭组 = 1)运行它,那效果很好......但我不确定如何在所有家庭组上执行此操作。

我猜我需要一个更新查询,它有一个子查询......这个子查询有它自己的子查询......??

我很困惑:(而且我一直在想我拒绝使用的邪恶光标,除非我的头上有枪(因为我相信它可以用'Set'符号正确处理)。

4

1 回答 1

1

要获得团队中每个学生的dense_rank:

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

我不清楚你想要更新什么。

于 2009-07-24T00:50:05.663 回答