Я пытаюсь присвоить ранг двум столбцам. Оба столбца являются числовыми значениями, а один представляет собой координату X, а другой - координатой Y.SQL Server - Dense/Rank не дает желаемых результатов
Мой оператор выбора заключается в следующем:
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 = 1, Y = 1 для обеих строк, а не X = 1, Y = 1 & X = 1 , Y = 2.
Мой первый вопрос: почему это происходит или что я делаю неправильно, и, во-вторых, кажется, что rank()/Dense_Rank() не выходит за пределы десятичной, это правда?
Я бросил значение в целое, чтобы удалить возможные конфликты с поплавками
+--------+--------+-----+----+--------------------------------------+------------------+
| 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 |
+--------+--------+-----+----+--------------------------------------+------------------+
Если «unique unique» действительно уникален, я не ожидаю, что вы получите что-либо кроме 1 для всех ваших значений DENSE_RANK(), потому что вы разбиваете на разделы по уникальному значению ... – ZLK
@ZLK Хорошая точка, он не уникален в том смысле, который вы описываете. Существует несколько строк с одним и тем же уникальным (это значение представляет родительский элемент для каждой строки). Мне нужно, чтобы это значение присутствовало, когда оно группирует необходимые строки и делает ранжирование на каждом уникальном подмножестве. Надеюсь, это имеет смысл. – Cjust689
Я действительно не понимаю, какие результаты вы ожидаете, которые отличаются от приведенного вами примера. Все эти координаты X-Y выглядят уникальными. Или это то, что вы думаете, что оно должно производить, и это не так? – ZLK