【发布时间】:2014-01-06 13:18:53
【问题描述】:
如果我这样做
dense_rank() over (order by colname),
对于列 colname 中具有相同值的所有行,我得到相同的排名。
但是,我想将具有相同排名的行数限制为 @maxrows,以便当 @maxrows 行在 colname 中具有相同值时,即使 colname 的值仍然是,也会为下一行分配一个新排名一样的。
我怎样才能做到这一点?
【问题讨论】:
-
您可以使用 Ntile 函数,因为 NTILE 函数允许您通过为每一行分配一个图块编号,将结果中的行与图块(大小相等的行组)相关联。您指定要跟踪的图块数量作为函数的输入,并在 OVER 子句中指定逻辑顺序。
-
NTILE几乎与 OP 要求的相反 - 您指定需要多少组,而不是组的大小。此外,NTILE会将具有不同colname值的行放在同一组中,这与DENSE_RANK()完全不同。
标签: sql sql-server tsql dense-rank