Inquiridor
Mostrar o número da linha retornado pelo Select no Sql 2000 ?

Pergunta
-
Select codigo, nome from clientes
o retorno seria :
001 - Adriano
002 - Leandro
.... e assim por diante , Seria possivel eu criar uma coluna com o número da linha exemplo:
1 - 001 - Adriano
2 - 002 - Leandro
3 - 005 - Pedro
... e assim por diante ?
Desde já agradeço
Todas as Respostas
-
Bom Dia,
Por coincidência, acabamos de sugerir como fazer isso em uma Thread no "SQL Server Geral". Uma possível sugestão no SQL Server 2000 é:
Code SnippetCREATE
TABLE #tbl (CODIGO INT, NOME VARCHAR(20))INSERT
INTO #tbl (CODIGO, NOME) VALUES (15,'JUQUINHA')INSERT
INTO #tbl (CODIGO, NOME) VALUES (17,'ZEQUINHA')INSERT
INTO #tbl (CODIGO, NOME) VALUES (18,'PEDRINHO')INSERT
INTO #tbl (CODIGO, NOME) VALUES (21,'MARIAZINHA')INSERT
INTO #tbl (CODIGO, NOME) VALUES (32,'CAMILINHA')SELECT
(SELECT COUNT(CODIGO) FROM #tbl AS T2 WHERE T2.CODIGO <= T1.CODIGO) AS Pos,CODIGO
, NOMEFROM
#tbl AS T1DROP
TABLE #tblOpcionalmente você pode utilizar uma tabela temporária com o Identity.
[ ]s,
Gustavo
-
-
Olá Adriano,
Como o Gustavo disse, acabamos de responder outra pergunta muito parecida. Segue o exemplo que postei lá:
Code SnippetWITH
ClientesComPosicao AS(SELECT
FROM
Clientes)
SELECT
POS, Codigo, Nome FROM ClientesComPosicao WHERE AlgumCampo = ValorEste é o link original: http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=2725601&SiteID=21
Abraço
-
Oi Jr.
A temporária com Identity é uma alternativa (e algumas vezes a melhor alternativa). O problema é que essa alternativa onera mais o I/O por conta da escrita em disco enquanto o COUNT onera mais a CPU por conta do processamento. Com a subquery sendo executada a cada linha temos o que alguns chamam de Partial Scan. É possível diminuir parte desse overhead se o campo código estiver indexado. Como na maioria dos ambientes o I/O costuma ser mais limitando eu acabado postando sempre a do COUNT, mas a temporária também pode funcionar muito bem (mesmo em ambientes com pressões sobre I/O).
O fato é que a medida em que a quantidade de registros aumenta, ambas as soluções (ou até eventualmente um cursor) começam a degradar. É por isso que, como citado pelo Alexandre no outro post, a alternativa do Row_Number é bem melhor (pena que só no 2005).
[ ]s,
Gustavo
-
Adriano, segue um código de exemplo:
Code SnippetDECLARE @tbClientes TABLE (Idx INT Identity(1,1), NomeCliente VARCHAR(100))
INSERT INTO @tbClientes (NomeCliente)
(SELECT NomeCliente FROM dbo.clientes)
SELECT Idx, NomeCliente FROM dbo.clientes
Espero que ajude!
Abraços,
-
Olá Rodrigo, entendi, mas realmente acredito que não será possível está utilizando dessa forma.
Pois o meu select é retornado em um determinado recordset pela aplicação, ou seja, eu passo um único select e é retornado um cursor ou mais precisamente, um cursor em dbf.
De qualquer forma obrigado, tentarei resolver isso através do gerador de relatório talvez seja possível.
Abraços,
Adriano
-
Adriano bom dia.
Olha eu acho que entendi o que você está precisando.
Eu estava precisando retornar um ID para cada tipo de logradouro da tabela de cep.
Montei o seguine select, para cada linha um id:
usei o cast para converter o resultado do row_number para inteiro, assim eu consigo trabalhar com o recordset ou mesmo o dataset ou então um selectedvalue no combobox.
SELECT
CAST(ROW_NUMBER() OVER(ORDER BY CepTipoLogradouro) AS INTEGER) AS Id, CepTipoLogradouro FROM Cep WITH(NOLOCK) GROUP BY CepTipoLogradouro
- Sugerido como Resposta Sérgio Rezende Júnior quarta-feira, 5 de agosto de 2009 14:15
-