我正在使用SQL Server 2008。我有一个查询返回的数据,看起来很像按照Day和ManualOrder排序的这个样子...
ID Day ManualOrder Lat Lon
1 Mon 0 36.55 36.55
5 Mon 1 55.55 54.44
3 Mon 2 44.33 44.30
10 Mon 3 36.55 36.55
11 Mon 4 36.55 36.55
6 Mon 5 20.22 22.11
9 Mon 6 55.55 54.44
10 Mon 7 88.99 11.22
77 Sun 0 23.33 11.11
77 Sun 1 23.33 11.11
我想做的是按照日期和手动排序来排序数据,但我想要一个行计数器(叫做MapPinNumber)。问题在于,我希望遇到相同的Lat / Lon和相同的日期后,该行计数器会重复。如果是不同的lat / lon,则可以继续下一行计数器。在最终结果中,我们必须保持Day、ManualOrder的顺序。我将在地图上绘制这些数据,而这个数字应该代表我将按手动顺序绘制的引脚编号。这些数据表示司机的路线,他可能在一天中多次前往相同的lat / lon。例如,他先开车去沃尔玛,然后去CVS,再回到沃尔玛,然后去沃尔格林斯。我需要的MapPinNumber列应该是1、2、1、3。因为他在星期一多次去沃尔玛,但它是他开车的第一个地方,在地图上始终是Pin#1。
这是我需要计算MapPinNumber列的结果。我已经尝试了所有我能想到的ROW_NUMBER和RANK,但还是无法解决!我正在尝试避免使用丑陋的CURSOR。
ID Day ManualOrder Lat Lon MapPinNumber
1 Mon 0 36.55 36.55 1
5 Mon 1 55.55 54.44 2
3 Mon 2 44.33 44.30 3
10 Mon 3 36.55 36.55 1
11 Mon 4 36.55 36.55 1
6 Mon 5 20.22 22.11 4
9 Mon 6 55.55 54.44 2
10 Mon 7 88.99 11.22 5
77 Sun 0 23.33 11.11 1
77 Sun 1 23.33 11.11 1
RANK()
或者DENSE_RANK()
(根据情况而定)来代替ROW_NUMBER()
。 - Pradeep Kumar