我试图给两列排名。两列都是数值,一列代表X坐标,另一列代表Y坐标。
我的选择语句如下:
SELECT
Dense_Rank() over (Partition by X,uniqueid Order by Y ASC) as Y_Rank,
Dense_Rank() over (Partition by Y,uniqueid Order by X ASC) as X_Rank
,[uniqueid]
,[X]
,[Y]
FROM xxxx.xxxxx
这个想法是上面的语句在连接时会产生一个x / y坐标。然而,我的结果集不产生“唯一”坐标,或者如果两行具有相同的X但不同的Y值,则我得到X = 1,两行的Y = 1而不是X = 1,Y = 1& X = 1,Y = 2。
我的第一个问题是为什么会发生这种情况或者我做错了什么,其次看起来rank()/ Dense_Rank()看起来并不超出小数,是真的吗?
我已将值转换为int以消除与浮点数的可能冲突
+--------+--------+-----+----+--------------------------------------+------------------+
| X_Rank | Y_Rank | X | Y | uniqueid | Slot_Side |
+--------+--------+-----+----+--------------------------------------+------------------+
| 1 | 1 | 29 | 4 | 00000000-0000-0000-0000-fffff27fdf27 | 1 |
| 1 | 2 | 29 | 45 | 00000000-0000-0000-0000-fffff27fdf27 | 1 |
| 1 | 1 | 52 | 6 | 00000000-0000-0000-0000-fffff27fdf2d | 1 |
| 2 | 1 | 236 | 6 | 00000000-0000-0000-0000-fffff27fdf2d | 1 |
| 1 | 1 | 33 | 45 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 1 | 1 | 5 | 3 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 2 | 1 | 55 | 3 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 2 | 1 | 83 | 45 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 3 | 1 | 133 | 45 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 3 | 1 | 105 | 3 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 4 | 1 | 155 | 3 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 4 | 1 | 183 | 45 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 5 | 1 | 233 | 45 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 5 | 1 | 205 | 3 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 6 | 1 | 255 | 3 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 6 | 1 | 283 | 45 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 7 | 1 | 333 | 45 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 7 | 1 | 305 | 3 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 8 | 1 | 355 | 3 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 8 | 1 | 383 | 45 | 00000000-0000-0000-0000-fffff27fe073 | 0 |
| 1 | 1 | 5 | 2 | 00000000-0000-0000-0000-fffff27fe074 | 0 |
| 2 | 1 | 41 | 2 | 00000000-0000-0000-0000-fffff27fe074 | 0 |
| 3 | 1 | 77 | 2 | 00000000-0000-0000-0000-fffff27fe074 | 0 |
| 4 | 1 | 113 | 2 | 00000000-0000-0000-0000-fffff27fe074 | 0 |
| 5 | 1 | 149 | 2 | 00000000-0000-0000-0000-fffff27fe074 | 0 |
| 6 | 1 | 185 | 2 | 00000000-0000-0000-0000-fffff27fe074 | 0 |
| 7 | 1 | 221 | 2 | 00000000-0000-0000-0000-fffff27fe074 | 0 |
| 8 | 1 | 257 | 2 | 00000000-0000-0000-0000-fffff27fe074 | 0 |
| 9 | 1 | 293 | 2 | 00000000-0000-0000-0000-fffff27fe074 | 0 |
+--------+--------+-----+----+--------------------------------------+------------------+
答案 0 :(得分:0)
所以我发现了我的逻辑缺陷。
以下是更正的声明:
Select
Dense_Rank() over (Partition by Y,uniqueid Order by Y) as X_Rank,
Dense_Rank() over (Partition by uniqueid Order by Y) as Y_Rank
,[uniqueid]
,[X]
,[Y]
FROM xxxx.xxxxx
我认为我的X_Rank语句正在工作时被欺骗了,因为我正在使用的数据确实是巧合。通过基于Y对其进行优先级排序或排序/分区,更正的语句给予X_Rank更多的权重。我的想法是我真的关心Y值相对于X的变化,因为这表明新的"行&#34 ;.我原来的陈述同样地看了X和Y,它们返回了不想要的结果。一旦我为X_Rank建立了关系,我只需要查看Y,因为它是有序的而不是Y相对于X的意思。抱歉我的可怜的解释但至少它有效。无论如何,谢谢你的帮助!