Няма нужда да избягвате аналитични функции, ако вашата база данни ги поддържа, напр. ROW_NUMBER()
SELECT
ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
FROM
[<TABLE_NAME>]
Синтаксисът е Func([ arguments ]) OVER (analytic_clause)
трябва да се фокусирате върху НАД (). Последните скоби правят дял(ове) на вашите редове и прилагат Func() върху тези дялове един по един. В горния код имаме само един набор/разделяне на редове. Следователно генерираната последователност е за всички редове.
Можете да създадете множество набори от вашите данни и да генерирате пореден номер за всеки от тях наведнъж. Например, ако трябва да генерирате пореден номер за целия набор от редове, те имат една и съща категорияId. Просто трябва да добавите Partition By
клауза като тази (PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>])
.
Запомнете това след FROM
можете също да използвате друг допълнителен ORDER BY
за да сортирате данните си по различен начин. Но няма ефект върху OVER ()