Não há necessidade de evitar funções analíticas se seu banco de dados as suportar, por exemplo, ROW_NUMBER()
SELECT
ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
FROM
[<TABLE_NAME>]
A sintaxe é
Func([ arguments ]) OVER (analytic_clause)
você precisa se concentrar em OVER (). Este último parêntese faz partição(ões) de suas linhas e aplica o Func() nessas partições uma a uma. No código acima, temos apenas um único conjunto/partição de linhas. Portanto, a sequência gerada é para todas as linhas. Você pode fazer vários conjuntos de seus dados e gerar o número de sequência para cada um de uma só vez. Por exemplo, se você precisar gerar um número de sequência para todo o conjunto de linhas que tenham o mesmo categoryId. Você só precisa adicionar
Partition By
cláusula como esta (PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>])
. Lembre-se que depois de
FROM
você também pode usar outro ORDER BY
extra para classificar seus dados de maneira diferente. Mas não tem efeito sobre o OVER()