我有一个包含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()
,但我没有得到我想要的结果。
答案 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;