Dificuldade (Dúvida) View

Oracle PL SQL

17/12/2019

Pessoal Bom dia !

Vou começar tentando explicar o problema que preciso resolver e depois a dificuldade que estou tendo e que ainda não encontrei solução.

Seguinte, possuo um programa para geração de etiquetas, onde através do banco trago as informações geradas nas mesmas, ordenadas por nota fiscal , porem preciso colocar dois campos X / Y, onde Y é a quantidade de etiquetas de uma nota especifica ex: uma nota possui 100 etiquetas, entao Y seria 100 e X seria de 1 a 100. Ai vem o problema, possuo uma view para agrupar e rankear as nfs gerando assim as infos do campos X, e executando a query da view em si a ordenação vem certinho, porem ao dar um select na view em si a ordenação de algumas notas vem errada.
Não sei se consegui ser muito claro em meu problema, vou postar a query da view e o resultado. Se alguém tiver alguma ideia do que pode ser o problema.

CREATE OR REPLACE FORCE VIEW "EMS2ESP"."V_ES_CONFERENCIA_2"  AS 
select LINHA, cdd_embarq,nr_nota_fis,nr_pedido,nr_pedido_2,nr_resumo,tipo,cod_barras,rua,cod_emitente,nome_emit,cidade,estado,pais,nome_transp,
DENSE_RANK() OVER (PARTITION BY (NR_NOTA_FIS)
ORDER BY  (LINHA)) AS D_RANK
from ems2esp.v_es_conferencia  where cdd_embarq = ''854''; 


Executando essa query, tenho o resultado correto no campo D_RANK.
Porem ao dar um select na view em si
 "select * from ems2esp.v_es_conferencia_2 where cdd_embarq = ''854'';"
, Algumas notas saem com o campo D_rank errado. Ex: teria que sair ordenado dessa forma 1 ,2 ,3, 4 .... porem sai assim: 758,759,760 .... .
Resumindo: Executando a query tenho o resultado correto e executando a view não.
Se alguem puder me ajudar a intender o motivo.
Danilo Franco

Danilo Franco

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

17/12/2019

aparentemente é isso mesmo:
CREATE OR REPLACE FORCE VIEW "EMS2ESP"."V_ES_CONFERENCIA_2" AS
	select
		LINHA, cdd_embarq, nr_nota_fis, nr_pedido, nr_pedido_2, nr_resumo, tipo,
		cod_barras, rua, cod_emitente, nome_emit, cidade, estado, pais, nome_transp,
		DENSE_RANK() OVER (PARTITION BY (NR_NOTA_FIS) ORDER BY (LINHA)) AS D_RANK
	from ems2esp.v_es_conferencia;

e pra usar:
select * from ems2esp.v_es_conferencia_2 where cdd_embarq = '854'
order by nr_nota_fis, LINHA
GOSTEI 0
POSTAR