唯一标识绑定的游戏分数组

时间:2015-08-24 21:57:07

标签: sql sql-server sql-server-2012

我有一个包含TeamId,GameId,IsWin和IsLoss列的集合。我想编写一个查询,不仅可以总结每个团队的输赢,而且我还想创建一个列,用于唯一标识具有相同赢额和损失数的团队的 。换句话说,如果一支球队的胜负数与一支或更多其他球队相同,那么他们应该共享相同的“TieGroup”

例如,如果我总结了输赢,按Wins DESC, Losses ASC排序并获得此结果:

Team  W L
Team1 4 0
Team2 4 0
Team3 3 1
Team4 1 3
Team5 0 4
Team6 0 4

然后在我添加列以对绑定的团队进行分组后,我希望这个结果

Team  W L TieGroup
Team1 4 0 1
Team2 4 0 1
Team3 3 1 2
Team4 1 3 3
Team5 0 4 4
Team6 0 4 4

Team1和Team2是绑定的,因此属于同一组。 Team3和Team4的记录与其他任何团队都不同,因此他们每个人都有自己的团队。 Team5和Team6也是绑定的,因此它们属于同一组。

我该怎么做?我尝试使用row_count()rank(),但我没有得到我想要的结果。

1 个答案:

答案 0 :(得分:4)

使用DENSE_RANK()

<强> SQLFiddleDemo

CREATE TABLE tab(team NVARCHAR(100), win INT, lose INT);

INSERT INTO tab(team, win, lose)
VALUES ('Team1', 4, 0), ('Team2', 4, 0), ('Team3', 3, 1), 
       ('Team4', 1, 3), ('Team5', 0, 4), ('Team6', 0, 4); 

SELECT 
   team
  ,win
  ,lose
  ,[tie_group] = DENSE_RANK() OVER (ORDER BY win DESC, lose ASC)
FROM tab;