Например, рассмотрим запрос SQL:
SELECT
A.[Name],
ROW_NUMBER() OVER(ORDER BY A.[Name] ASC)
FROM
[FooTable] AS A
Здесь я наблюдаю результаты, отсортированные по A. [Имя]. Если я изменю столбец сортировки, определенный в функции ROW_NUMBER, на другой столбец, результаты снова будут отсортированы по этому столбцу.
Я ожидал, что номер строки будет присвоен строкам, но я не ожидал, что строки будут возвращены отсортированными по тем же критериям. Является ли это просто побочным эффектом выполнения запроса (в моем случае на SQL Server 2008 R2) или такое поведение гарантировано? (Я не мог найти ссылку на такую гарантию).
sql-server-2008-r2
order-by
redcalx
источник
источник
Ответы:
Если вы задали вопрос, я думаю, что вы на самом деле хотели спросить:
Мы могли бы попросить вас создать псевдоним для
ROW_NUMBER()
выражения, а затем отсортировать, используя псевдоним:Теперь вам нужно всего лишь изменить выражение в одном месте, и результирующая сортировка будет основана на этом выражении без повторения.
источник
repeating the complex ORDER BY expression
даже не гарантирует, что результат будет получен в порядке ROW_NUMBER (). Если столбцы в предложении ORDER BY не образуют уникальный ключ.Точно нет. Доказательство:
Единственный способ гарантировать заказ в SQL - это запросить его, использовать
ORDER BY
сам результат.источник
На самом деле (старый) вопрос можно расширить, включив в него также разделение по частям, поскольку, как представляется, существует неявный порядок сначала по разделам, а затем по частям
Так что это не так просто, как некоторые предлагали, чтобы назначить row_number и использовать его для упорядочивания.
Нам понадобится также вложенный sql, извлекающий раздел с помощью предложения (если мы, конечно, не хотим просто повторять его)
Эмпирически мы, кажется, получаем последнюю строку порядка неявно
Но нам не хватает каких-либо доказательств или гарантии того, что это всегда так.
(Если в игре несколько вызовов Row_Number (), это последний, который, кажется, дает порядок)
ТАКЖЕ ВНИМАНИЕ, если вы явно добавляете порядок в плане выполнения, ясно показывает окончательный шаг сортировки, а сортировка уже отсортированного набора является наихудшим случаем, следовательно, с Order By требуется значительно больше времени, чем без
источник