SQL排名优先

时间:2013-08-10 21:20:41

标签: sql sql-server-2008

仍在学习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

2 个答案:

答案 0 :(得分:2)

我完全同意TimSchmelter - 你不应该将小组存储在位列中。在您当前的架构中,查询可能类似于

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

但如果您将来会有更多的组,则必须在over子句

中编写案例

sql fiddle example

答案 1 :(得分:0)

试试这个

select *,Row_number() OVER(ORDER BY groupA*100+value desc ) as Rank
from Ranks
order by groupA desc,value desc