我有一个简单的表,其中包含唯一标识符和每个标识符的计数器值。根据计数器值对表进行排序后,我需要得到的是特定标识符的位置。
我目前的解决方案是在对结果进行排序时对所有数据执行SELECT,然后通过结果列表找到所需的标识符,我找到的位置是我想要的排名值。
不幸的是,这需要大型表的大量内存和计算时间。所以我的问题是:是否有一个SQL语句在表被排序后返回特定标识符的位置?
答案 0 :(得分:5)
如果您使用的是SQL Server 2005及更高版本,则可以使用RANK()
或DENSE_RANK()
窗口函数:
SELECT
(your list of columns here),
RANK() OVER(ORDER BY yourcolumnnamehere)
FROM dbo.YourTable
或:
SELECT
(your list of columns here),
DENSE_RANK() OVER(ORDER BY yourcolumnnamehere)
FROM dbo.YourTable
请参阅explanation of difference between RANK and DENSE_RANK here
其他RDBMS(如Oracle)似乎也支持这些窗口函数。