Boa Tarde,
Tenho uma tabela com vários registros, por data.
Exemplo:
data tipo
07/06/2010 CAIXA 1
07/06/2010 CAIXA 5
07/06/2010 CAIXA 5
07/06/2010 CAIXA 2
07/06/2010 CAIXA 1
08/06/2010 CAIXA 1
08/06/2010 CAIXA 3
08/06/2010 CAIXA 3
Preciso gerar um relatório agrupado por dia.
Exemplo da saida dbsm_output.
dia tipos
07/06/2010 CAIXA 1;CAIXA 5;CAIXA 5;CAIXA 2;CAIXA 1;
08/06/2010 CAIXA 1;CAIXA 3;CAIXA 3;
Alguém sabe como faço isso? Pensei em um vetor, mas acho que não estou conseguindo usar corretamente, pois não consigo
agrupar por dia.
Qualquer ajuda é bem vinda. Obrigado.
Busca de varias linhas de uma tabela
-
- Moderador
- Mensagens: 1177
- Registrado em: Qui, 15 Out 2009 10:28 am
- Localização: Recife
Poderia fazer uma procedure que dentro dela teria um cursor, nesse cursor você vai passando sempre dia a dia e então montando sua saida..
tem varias soluções..
tem varias soluções..
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:

-
- Moderador
- Mensagens: 1177
- Registrado em: Qui, 15 Out 2009 10:28 am
- Localização: Recife
posta o nome da tabela e as colunas...
da pra montar uma estrutura mais facil pra você visualizar...
vou escrever meio de cabeca ai... to sem tempo agora cara, espero que ajude
como disse da pra fazer de varias formas, essa escrevi rapidamente aqui pra passar a ideia, que seria percorrer dia a dia e ir montando a saida, ai no cursor dos dias_mês você considera o periodo que você montar a saida...
da pra montar uma estrutura mais facil pra você visualizar...
vou escrever meio de cabeca ai... to sem tempo agora cara, espero que ajude
create or replace procedure PGERACAIXA IS
cursor cur_caixas (iDia in Date) is
select que você postou no exemplo as caixa,
coluna_diames as diames
from dual;
cursor cur_diames loop
select pegando todos os dias que tem movimento de caixa, para passar como parametro para o outro cursor,
mensagem varchar2(32000);
begin
for x in cur_diames loop
mensagem := null;
for i in cur_caixas (x.diames) LOOP
if (mensagem is null) then
mensagem := 'xxx';
dbms_output.put_line('Dia: '||i.diames);
dbms_output.pt_line('caixa: '||i.caixa);
else
dbms_output.put(i.caixa);
end if;
end loop;
como disse da pra fazer de varias formas, essa escrevi rapidamente aqui pra passar a ideia, que seria percorrer dia a dia e ir montando a saida, ai no cursor dos dias_mês você considera o periodo que você montar a saida...
-
- Rank: Analista Júnior
- Mensagens: 74
- Registrado em: Seg, 06 Ago 2007 3:59 pm
- Localização: Campinas - SP
Eduardo Gomes
leo_jf não sei se você já resolveu seu problema, mas segue uma alternativa para resolve-lo:
-- criação da tabela para simular sua situação
--inserção dos dados conforme postado no fórum
--select que traz o resultado conforme solicitado
--pode no caso, criar uma view para seu relatório
--resultado
"DATA" "STRING_CONCATENADA"
1 07/06/10 "CAIXA 1; CAIXA 1; CAIXA 2; CAIXA 5; CAIXA 5"
2 08/06/10 "CAIXA 1; CAIXA 3; CAIXA 3"
veja ai se atende sua necessidade, e qualquer dúvida posta ai...
espero ter ajudado!!!!
-- criação da tabela para simular sua situação
create table t_teste (
data date,
tipo varchar2(15)
);
insert into t_teste values (to_date('07/06/2010','dd/mm/rrrr'),'CAIXA 1');
insert into t_teste values (to_date('07/06/2010','dd/mm/rrrr'),'CAIXA 5');
insert into t_teste values (to_date('07/06/2010','dd/mm/rrrr'),'CAIXA 5');
insert into t_teste values (to_date('07/06/2010','dd/mm/rrrr'),'CAIXA 2');
insert into t_teste values (to_date('07/06/2010','dd/mm/rrrr'),'CAIXA 1');
insert into t_teste values (to_date('08/06/2010','dd/mm/rrrr'),'CAIXA 1');
insert into t_teste values (to_date('08/06/2010','dd/mm/rrrr'),'CAIXA 3');
insert into t_teste values (to_date('08/06/2010','dd/mm/rrrr'),'CAIXA 3');
--pode no caso, criar uma view para seu relatório
select data,
substr(max(replace(sys_connect_by_path(tipo, '|')
, '|'
, '; ' /*delimitador*/
)
)/*max para agrupar*/
,3 /*length do delimitador +1 = [length('; ') + 1] */
) string_concatenada /*substr para eliminar o delimitador no início do registro*/
from (
select a.*
,row_number() over (partition by a.data order by a.data, a.tipo) row#
from t_teste a)
start with row# = 1
connect by prior data = data
and prior row# = row#-1
group by data
order by data;
--resultado
"DATA" "STRING_CONCATENADA"
1 07/06/10 "CAIXA 1; CAIXA 1; CAIXA 2; CAIXA 5; CAIXA 5"
2 08/06/10 "CAIXA 1; CAIXA 3; CAIXA 3"
veja ai se atende sua necessidade, e qualquer dúvida posta ai...
espero ter ajudado!!!!
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Bing [Bot] e 1 visitante