SQL服务器按组和条件对行进行排名

时间:2018-04-12 11:59:20

标签: sql sql-server tsql

我需要帮助对一个表中的行进行排名。

+-----+-------+-------------+------------+-------+------+
| ID  | group | typeInGroup | rankOfType | score | Rank |
+-----+-------+-------------+------------+-------+------+
| 1   | a     | type1       |          1 |    40 |      |
| 2   | a     | type2       |          2 |    55 |      |
| 3   | a     | type1       |          1 |    20 |      |
| 4   | b     | type3       |          3 |    80 |      |
| 5   | b     | type2       |          2 |    60 |      |
| 6   | b     | type1       |          1 |    70 |      |
| 7   | b     | type1       |          1 |    70 |      |
+-----+-------+-------------+------------+-------+------+

我基本上都在寻找能让我订购最后一栏“Rank”的解决方案。

每个“组”最多有9个“typeInGroup”,在“rankOfTypes”列中按1-9排名。每个“typeInGroup”都有“得分”。当我计算最后一列“Rank”时,我会看“score”和“rankOfType”列。

具有最高分数的行应排在第一位,除非有“rankOfType”列的行具有较低的值并且得分<= 15而不是我们一直在查看的分数。具有相同“得分”和“rankOfType”的行的顺序并不重要。

我应该检查组中的每一行以及最终的这一行:

+-----+-------+-------------+------------+-------+------+
| ID  | group | typeInGroup | rankOfType | score | Rank |
+-----+-------+-------------+------------+-------+------+
| 1   | a     | type1       |          1 |    40 |    1 |
| 2   | a     | type2       |          2 |    55 |    2 |
| 3   | a     | type1       |          1 |    20 |    3 |
| 4   | b     | type3       |          3 |    80 |    3 |
| 5   | b     | type2       |          2 |    60 |    4 |
| 6   | b     | type1       |          1 |    70 |    1 |
| 7   | b     | type1       |          1 |    70 |    2 |
+-----+-------+-------------+------------+-------+------+

知道怎么做吗?

1 个答案:

答案 0 :(得分:0)

NotificationCenter.default.addObserver(forName: NSNotification.Name.AuthStateDidChange, object: Auth.auth(), queue: nil) { _ in let user = Auth.auth().currentUser } 查询,检查符合您特殊要求的任何行(如果存在),而该行的优先级将更高

尝试使用更大的数据集并验证结果

CROSS APPLY