- Este tópico contém 5 respostas, 2 vozes e foi atualizado pela última vez 17 anos, 11 meses atrás por chduarte.
-
AutorPosts
-
1 de fevereiro de 2007 às 10:47 pm #78429Anônimo
Estou gerando um relatório em excel, e nele, tem
uma coluna(number) onde se repete os valores, pois no meu caso de relatório, aparecendo só uma vez esse valor já é o necessário.
Gostaria de saber se tem alguma maneira de fazer este valor aparecer uma vez só, e quando ele repetir jogar por exemplo um valor null ou 0.
Já tentei usar funções analíticas como over(patition by….) mas não consegui resolver o problema ainda..Se tiver alguma maneira de resolver isto e alguem puder me ajudar agradeço desde já.Fernando.
2 de fevereiro de 2007 às 12:52 am #78432chduarteParticipanteVc pode utilizar o distinct mas nao deu para visualizar muito bem o seu problema. Poderia colocar um “exemplo” para termos ver outra maneira de resolver o problema.
[]
2 de fevereiro de 2007 às 2:55 pm #78434AnônimoAqui vai um exemplo de como aparece o relatório gerado em excel, onde mostra uma auditoria de estoque de todas as filiais da empresa:
Filial evento descricao valor estoque_inicial
1 1020 Estorno outras saidas 7,48 821349,7185
1 3020 Atendimento Requisiçoes 4,95 821349,7185
1 4050 Consumo interno 8,76 821349,7185
4 4100 Transferencia recebida 12,53 39061,74008
5 4050 Consumo interno 54,9 22885,49853
5 4100 Transferencia recebida 35,8 22885,49853Percebe-se que quando o codigo da filial repete o valor do estoque inicial tambem repete. No caso do código da filial repetir não tem problema, o que eu queria que mostrasse uma vez só é o valor do estoque inicial, e joga-se um valor null ou 0 no lugar da repetição.
Fernando.
Fernando.
2 de fevereiro de 2007 às 3:05 pm #78436chduarteParticipanteEu nao sei se voce esta buscando diretamente do excel, mas no SQL*Plus voce tem um comando chamando break.
SQL> break on
Este comando faz exatamente o que voce precisa. Acredito que somente utilizando SQL nao há como vc fazer esta regra. Poderia ser possivel com PL/SQL.
Eu ja vi uma clausula chamada connect by prior mas nao sei se irá ajudar muito. Voce pode dar uma pesquisada nos guias de referencia.
[]
2 de fevereiro de 2007 às 5:11 pm #78438Anônimono Reports este campo(Estoque_Inicial) que estou gerando em excel é uma Coluna_Formula que segue:
function CF_est_iniFormula return Number
is
cursor c_est_ini is
select nvl(sum(trunc(nvl(res.res_nu_qtde_total,0) * nvl(res.res_nu_custo_medio,0),6)),0) ESTOQUE_INICIAL
from (select max(r.est_dt_data_movimento) max_data
,r.pro_id_codigo_do_produto produto
,r.emp_id_codigo_da_empresa empresa
,r.fil_id_codigo_da_filial filial
from almox.tb_resumo_estoque r
where r.emp_id_codigo_da_empresa = :p_empresa
and r.fil_id_codigo_da_filial = :filial
and r.est_dt_data_movimento <= :p_data_inicio – (1)
and r.pro_id_codigo_do_produto = nvl(:p_produto,r.pro_id_codigo_do_produto)
group by r.pro_id_codigo_do_produto
,r.emp_id_codigo_da_empresa
,r.fil_id_codigo_da_filial ) a
,almox.tb_resumo_estoque res
where a.max_data = res.est_dt_data_movimento
and a.empresa = res.emp_id_codigo_da_empresa
and a.filial = res.fil_id_codigo_da_filial
and a.produto = res.pro_id_codigo_do_produto;v_est_ini number(18,6);
begin
open c_est_ini; fetch c_est_ini into v_est_ini; close c_est_ini; return v_est_ini;
end;
2 de fevereiro de 2007 às 8:31 pm #78446chduarteParticipanteEu nao conheco muito bem como o Excel trata a sessao mas ja que voce tem uma function, uma maneira para resolver seria criar uma package com uma variavel global e armazenar o ultimo valor impresso na coluna.
Se o proximo valor for igual ao valor anterior, imprime null, senao imprime o valor.
Da um pouco de trabalho mas se o Excel manter a sessao persistente e armazenar este valor da variavel global pode ser que resolva.
[]
-
AutorPosts
- Você deve fazer login para responder a este tópico.