Row_number Over() Firebird

23/01/2017

0

Olá,
Eu uso MSSQL e estou com um problema para fazer compatibilidade de uma Query para o Firebird 2.5...
a Qurey é a seguinte:

SELECT

ROW_NUMBER() OVER(ORDER BY VP.DATA,VP.HORA) AS SEQUENCIA,
VP.ID_PEDIDO,
VP.ID_EMP,
P.DESCRICAOR AS DS_PRODUTO

from VND_PEDIDO as VP
INNER JOIN EQ_PROD P ON P.ID_PROD = VP.ID_PROD

mas não consigo acha uma solução alternativa para isso.
Fico grato caso alguém possa me ajudar...
Bruno

Bruno

Responder

Posts

26/01/2017

Jones Granatyr

Opa! Tente o seguinte

rdb$get_context('ID', 'row#')

Veja também este link

https://www.devmedia.com.br/forum/select-rownum-no-fb/48857

Segundo a documentação, o row_number foi adicionado somente a partir da versão 3 do Firebird
Responder

02/02/2017

Bruno

Oii.. eu tentei fazer assim e funciona...

SELECT
rdb$get_context('USER_TRANSACTION', 'row#') as row_number,
rdb$set_context('USER_TRANSACTION', 'row#',
coalesce(cast(rdb$get_context('USER_TRANSACTION', 'row#') as integer), 0) + 1),
a.*
FROM tb_unid a
ORDER BY a.id_unid

Mas tem um problema... quando eu executo novamente essa Query, ao invés de o numero da linha voltar a contagem do um ele começa a partir do maior valor da ultima consulta..
Ex.:
na primeira consulta:
1 João
2 Pedro
3 Jose
4 Maria

qndo executo novamente a mesma query aparece assim:
5 João
6 Pedro
7 Jose
8 Maria

e a cada vez aumenta ainda mais o que não vai ser interessante pois se trata de um modulo de entrega e o fluxo de dados vai acabar fazendo chegar esse valor em um limite qndo estiver muito alto.

Teria uma forma de zerar isso?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar