Поддерживает ли ROW_NUMBER () OVER (ORDER BY 1)? - PullRequest
0 голосов
/ 07 января 2020

Ниже 2 отчетов, дающих 2 разных результата

SELECT t.EID,t.name, ROW_NUMBER() OVER(ORDER BY 1) AS ROW_NUM
  FROM ESWAR t
;
EID  NAME   ROW_NUM
2    Ram       1
1    Siva      2
3    Deva      3
SELECT t.EID, t.name,ROW_NUMBER() OVER(ORDER BY t.EID) AS ROW_NUM
  FROM ESWAR t
;
EID NAME    ROW_NUM
1   Siva       1
2   Ram    2
3   Deva       3

Ответы [ 2 ]

5 голосов
/ 07 января 2020

С "О SQL Функции" - "Analyti c Функции" - "order_by_clause" :

Ограничения на предложение ORDER BY Clause

Следующие ограничения применяются к предложению ORDER BY:

  • (...) Позиция (position) и псевдонимы столбцов (c_alias) также недопустимы. (...)

Поэтому нет, позиция столбца не может использоваться в ORDER BY предложения OVER. Поэтому он просто рассматривается как целочисленный литерал. А поскольку этот литерал одинаков для всех строк, здесь нет определенного порядка.

Просто используйте вместо этого имя столбца. В любом случае, это понятнее - это относится также к предложению ORDER BY SELECT, плюс оно не ломается, если порядок столбцов изменяется.

1 голос
/ 07 января 2020

Вы не можете получить доступ к имени столбца по позиции в ORDER BY для аналитической (оконной) функции.

order by 1 означает « сортировать результат по номеру c value 1», поэтому сортирует по константе, а не по значению столбца.

По сути это то же самое, что order by 'foobar' или order by 99999

...