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...
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
Curtir tópico
+ 0
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
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?
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
Clique aqui para fazer login e interagir na Comunidade :)