仍在学习SQL,非常感谢您对此提供任何帮助或建议。我有一个带有值列的表和两个ID列,用于指定该行所属的组,即:
值| GroupA | B族
12 | 1 | 0
16 | 1 | 0
19 | 0 | 1
11 | 1 | 0
30 | 0 | 1
16 | 0 | 1
我想按降序排序这个表,但是在排除组B中的那些行之前,给予组A中1的行的排名优先级。输出应该看起来像这样。
值| GroupA | GroupB |排名
12 | 1 | 0 | 2
16 | 1 | 0 | 1
19 | 0 | 1 | 5
11 | 1 | 0 | 3
30 | 0 | 1 | 4
16 | 0 | 1 | 6
答案 0 :(得分:2)
我完全同意TimSchmelter - 你不应该将小组存储在位列中。在您当前的架构中,查询可能类似于
select
Value, GroupA, GroupB,
row_number() over(order by GroupA desc, value desc) as [Rank]
from Table1
但如果您将来会有更多的组,则必须在over子句
中编写案例答案 1 :(得分:0)
试试这个
select *,Row_number() OVER(ORDER BY groupA*100+value desc ) as Rank
from Ranks
order by groupA desc,value desc