RANK重复数据集

时间:2017-07-21 23:01:04

标签: sql sql-server tsql

假设我有类似A列和B列的数据,我怎么能像C列那样对它们进行排序?我尝试了多种RANKNTILE,但都没有成功。谢谢。

enter image description here

注意:每组不总是有3行,因此会有所不同。

2 个答案:

答案 0 :(得分:1)

SQL表本质上是无序的。第1行和第4行之间没有区别,您提供的数据也是如此。您可以生成等效的结果集,但顺序可能不同。

简单的算术可以解决这个问题:

select a, 
       ( row_number() over (order by a) + 2) / 3 ) as 
from t
order by a, b, c;

更好的方法是使用b列:

select a,
       row_number() over (partition by b order by a) as c
from t
order by a, c;

答案 1 :(得分:0)

你可以使用如下的ntile:

Select *, ntile(2) over(order by (Select NULL)) from #data

您可以根据数据

提供任何其他有效的排序列,而不是(选择NULL)