0

仍在学习 SQL,将不胜感激有关此问题的任何帮助或建议。我有一个表,其中包含一个值列和两个 ID 列,它们指定该行属于哪个组,即:

价值 | 甲组 | B 组
12 | 1 | 0
16 | 1 | 0
19 | 0 | 1
11 | 1 | 0
30 | 0 | 1
16 | 0 | 1

我想按降序对该表进行排序,但在对组 B 中的行进行排名之前,优先考虑 A 组中具有 1 的行。输出应如下所示。

价值 | 甲组 | B组 | 排名
12 | 1 | 0 | 2
16 | 1 | 0 | 1
19 | 0 | 1 | 5
11 | 1 | 0 | 3
30 | 0 | 1 | 4
16 | 0 | 1 | 6

4

2 回答 2

2

我完全同意 TimSchmelter - 你不应该将组存储在位列中。在您当前的架构查询中可能看起来像

select
    Value, GroupA, GroupB,
    row_number() over(order by GroupA desc, value desc) as [Rank]
from Table1

但是如果你将来有更多的组,你必须在 over 子句中写 case

sql小提琴示例

于 2013-08-10T21:35:46.793 回答
0

尝试这个

select *,Row_number() OVER(ORDER BY groupA*100+value desc ) as Rank
from Ranks
order by groupA desc,value desc
于 2013-08-10T21:25:50.473 回答