Algumas pessoas tem dúvida de como retornar o número da linha sequencial em um Select, para conseguir algumas pessoas fazem uso de subqueries ou de tabelas temporárias.
O SQL Server tem uma função que faz isso automático para você, o ROW_NUMBER(). O ROW_NUMBER() retorna um número sequencial para cada linha de retorno do seu Select.
Sintax:
ROW_NUMBER ( ) OVER ( ORDER BY <order_by_clause> )
Neste caso a sequência das linhas será determinada pela cláusula Order By.
Considerando uma tabela com os dados abaixo. Para isso crie uma tabela temporária e insira os dados:
| Nome | Profissao | Idade |
| José Carlos Santos | DBA | 35 |
| Ana Maria | Desenvolvedora | 40 |
| Paulo Sergio | Analista | 20 |
| Maria Oliveira | Analista | 35 |
| | | |
CREATE TABLE #T (
NOME varchar(60) NULL,
Profissao varchar(60) NULL,
Idade int NULL
)
INSERT INTO #T VALUES('José Carlos Santos','DBA',35)
INSERT INTO #T VALUES('Ana Maria','Desenvolvedora',40)
INSERT INTO #T VALUES('Paulo Sergio','Analista',20)
INSERT INTO #T VALUES('Maria Oliveira','Analista',35)
SELECT * FROM #T
GO
SELECT ROW_NUMBER() OVER(ORDER BY NOME) AS RowID, * FROM #T
GO
SELECT ROW_NUMBER() OVER(ORDER BY NOME) AS RowID, * FROM #T
ORDER BY Idade
GO
compare o resultado acima.
Observe que o primeiro Select os dados são retornados na sequência em que foram inseridos, enquanto que o segundo Select os dados são retornados na sequencia da cláusula Order By do OVER, logo na ordem da coluna RowId.
O que ocorre no último select é que prevalece o Order By do Select, enquanto a Cláusula Order By do OVER determina a sequência da Coluna RowId.
Jenner Maciejewsky Rocha
MVP Visual Basic