Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да генерирам пореден номер на ред в tsql?

Няма нужда да избягвате аналитични функции, ако вашата база данни ги поддържа, напр. 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 ()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е значението на саморефериращия външен ключ?

  2. MSSQL 2008:Вземете последния актуализиран запис по конкретно поле

  3. Cross join Sql Query

  4. Как да търсите низ в бази данни на SQL Server

  5. Трябва ли да използвам блок try..catch и изрично връщане назад в процедура на SQL Server?