como criar um contador virtual numa consulta SQL
Ex.:
select CODIGO, NOME from CLIENTES
RESULTADO:
1 JOSE
2 MARIA
4 JOAO
5 CARLOS
11 JOAQUIM
gostaria que ficasse assim:
1 JOSE 1
2 MARIA 2
4 JOAO 3
5 CARLOS 4
11 JOAQUIM 5
select CODIGO, NOME from CLIENTES
RESULTADO:
1 JOSE
2 MARIA
4 JOAO
5 CARLOS
11 JOAQUIM
gostaria que ficasse assim:
1 JOSE 1
2 MARIA 2
4 JOAO 3
5 CARLOS 4
11 JOAQUIM 5
Carlos_tedex
Curtidas 0
Melhor post
Romulocpd
05/09/2007
Tente
Deverá funcionar conforme deseja.
Abraços
SELECT CODIGO, NOME, (row_number() over (order by CODIGO)) FROM CLIENTES
Deverá funcionar conforme deseja.
Abraços
GOSTEI 1
Mais Respostas
Emerson Nascimento
29/08/2007
qual o banco de dados?
GOSTEI 0
Carlos_tedex
29/08/2007
qual o banco de dados?
foi mau cara.
utilizo o SQL7 Server
GOSTEI 0
Marconogueira
29/08/2007
Parece que o FireBird tem uma função chamada GEN_ID para fazer isso. No SQL SERVER eu não conheço nenhuma, mas dá pra fazer assim:
Criar uma tabela temporária com um campo IDENTITY para guardar o número da linha.
Ex:
CREATE TABLE #tmpTeste (codigo INTEGER, nome VARCHAR(40), linha INTEGER IDENTITY)
INSERT INTO tmpTeste SELECT Codigo, Nome FROM Clientes
SELECT * FROM tmpTeste
DROP TABLE tmpTeste
Criar uma tabela temporária com um campo IDENTITY para guardar o número da linha.
Ex:
CREATE TABLE #tmpTeste (codigo INTEGER, nome VARCHAR(40), linha INTEGER IDENTITY)
INSERT INTO tmpTeste SELECT Codigo, Nome FROM Clientes
SELECT * FROM tmpTeste
DROP TABLE tmpTeste
GOSTEI 0
Carlos_tedex
29/08/2007
Parece que o FireBird tem uma função chamada GEN_ID para fazer isso. No SQL SERVER eu não conheço nenhuma, mas dá pra fazer assim:
Criar uma tabela temporária com um campo IDENTITY para guardar o número da linha.
Caro marconogueira,
sua dica deve dar certo sim... mas é justamente isso que eu não queria... ter que criar uma tabela temporaria, na verdade eu queria criar esse campo na propria consulta SQL sem intermedio do Delphi... mas agradeço sua atenção.
GOSTEI 0
Carlos_tedex
29/08/2007
Tente
SELECT CODIGO, NOME, (row_number() over (order by CODIGO)) FROM CLIENTES
Amigo, tentei esse comando no SQL7 e 8 e nos dois deram o mesmo erro, dizendo que essa função não é reconhecida. veja:
Server: Msg 195, Level 15, State 10, Line 1 ´row_number´ is not a recognized function name.
QQ novidade posta ai pra nois... valew
GOSTEI 0
Romulocpd
29/08/2007
Não me lembrei deste detalhe. Utilizo o SQL 2005 Enterprise, talvez o comando pertença somente a ele.
Daí não sei não.
Daí não sei não.
GOSTEI 0
Emerson Nascimento
29/08/2007
tente assim:
note que eu assumi que CODIGO é um campo string. se for numérico, utilize CAST para converter em string (char/varchar).
select rank=count(*), a1.CODIGO, a1.NOME from CLIENTES a1, CLIENTES a2 where a1.codigo + a1.nome >= a2.codigo + a2.nome group by a1.codigo, a1.nome order by rank
note que eu assumi que CODIGO é um campo string. se for numérico, utilize CAST para converter em string (char/varchar).
GOSTEI 0
Marcelo.bastos
29/08/2007
Carlos,
esse é um forma que eu gosto de utilizar para gerar um código virtual. Além de ser bem simples e funcionará em qualquer banco de dados.
SELECT A.NOME,
(SELECT (COUNT(*) + 1)
FROM CLIENTES B
WHERE B.NOME < A.NOME) AS COD_VIRTUAL
FROM CLIENTES A
ORDER BY A.NOME
No caso de você tentar utilizar ROW_NUMBER() é um função nova adicionada a versão do SQL Server 2005.
Valeu!
esse é um forma que eu gosto de utilizar para gerar um código virtual. Além de ser bem simples e funcionará em qualquer banco de dados.
SELECT A.NOME,
(SELECT (COUNT(*) + 1)
FROM CLIENTES B
WHERE B.NOME < A.NOME) AS COD_VIRTUAL
FROM CLIENTES A
ORDER BY A.NOME
No caso de você tentar utilizar ROW_NUMBER() é um função nova adicionada a versão do SQL Server 2005.
Valeu!
GOSTEI 0
Carlos_tedex
29/08/2007
Finalmente... rsrsrs
- Pessoal, gostaria de agradecer a atenção de todos os que me ajudaram nessa consulta SQL. mas as dicas dos seguintes usuários resolveram o problema:
[b:af4631265d]
- emerson.en
- marcelo.bastos[/b:af4631265d]
valew msm... pois essa consulta será de grande utilidade num relatório que estou desenvolvendo...
Abraços...
- Pessoal, gostaria de agradecer a atenção de todos os que me ajudaram nessa consulta SQL. mas as dicas dos seguintes usuários resolveram o problema:
[b:af4631265d]
- emerson.en
- marcelo.bastos[/b:af4631265d]
valew msm... pois essa consulta será de grande utilidade num relatório que estou desenvolvendo...
Abraços...
GOSTEI 0