DICA SQL: Retornando Número Da Linha No Select

by Jenner Maciejewsky 7. abril 2009 04:32

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

Tags: , ,

Blog | DICAS | General | MSDN | SQL

Os comentários estão fechados

Posts Antigos

Awards