Boa Tarde Galera do GUJ!
Este é o meu primeiro Tópico e gostaria de pedir desculpas se estiver postando em área errada!
Bom, seguinte… estou criando um relatório no IReport qual eu preciso separar por intervalos de datas, ou seja, o usuário digitaria dataInicio1 dataFim1 e dataInicio2 dataFim2… minha tabela está populada desta forma
responsável datainicio valor
A 01/01/2009 15
A 02/01/2009 20
A 08/01/2009 15
A 09/01/2009 20
B 03/01/2009 25
B 05/01/2009 45
B 07/01/2009 15
B 10/01/2009 20
meu relatório apareceria da seguinte maneira…
Responsável | de 01/01/2009 a 05/01/2009 | 06/01/2009 a 10/01/2009
A 35 35
B 70 35
Minha dúvida é… como eu poderia montar essa consulta via Ireports… já tentei por crosstabs… já tentei por group by… mas eu não estou obtendo o resultado esperado… uma vez q via crosstab… td vez q a data muda, ou seja, td dia… ele cria uma coluna…
será que alguém pode me ajudar a resolver este problema?!?
vlw pessoal
Não entendi o porque de enviar como parâmetros 2 datas iniciais e 2 finais, pode explicar?
boa noite mrrbigu…
então… preciso fazer as pesquisas de acordo com as datas iniciais e finais que serão definidas pelos usuários!
por exemplo… o usuário quer montar uma pesquisa por período, a qual ele quer especificar esses valores… sendo…
período1 - do dia 15/02/2009 a 20/03/2009
período2 - do dia 25/03/2009 a 30/03/2009
limitando a quantidade de períodos a 4!!! não sei se vc me entendeu…
muito obrigado pela resposta!
Bom dia
No seu relatório crie um paramtero DataInicial e um Data Final e passe na sua query ou na expressão do parametro que vc quer um select entre essas datas usando o between.
Att.
Se eu entendi bem oque vc ta querendo fazer acho que nao funciona no SQL…
seria isso? select * from xxx … where data ? between ? and data ? between ?
???
Se quer através de intervalos de datas, deve ser feito um por vez, não tem como passar
entre 01/01/2010 e 01/02/2010 … e entre 01/03/2010 e 01/05/2010…
o Sql vai se perder
Att. Jonas
[quote=dir_jacui]boa noite mrrbigu…
então… preciso fazer as pesquisas de acordo com as datas iniciais e finais que serão definidas pelos usuários!
por exemplo… o usuário quer montar uma pesquisa por período, a qual ele quer especificar esses valores… sendo…
período1 - do dia 15/02/2009 a 20/03/2009
período2 - do dia 25/03/2009 a 30/03/2009
limitando a quantidade de períodos a 4!!! não sei se vc me entendeu…
muito obrigado pela resposta!
[/quote]
Ps.: Limite a quantidade de períodos para 2… E o usuario digita os ‘N’ intervalos que quiser, 1 por vez
trabalhar com quantidade de colunas variável não é uma coisa muito simples (tanto no sql qto no ireports)…
mas como vc definiu o número de períodos com um máximo de 4, poderia usar um sql assim:
SELECT T.RESPONSAVEL,
( SELECT SUM(T.VALOR) FROM TABELA T1 WHERE T1.RESPONSAVEL = T.RESPONSAVEL AND T1.DT_INICIO BETWEEN :PI1 AND :PF1 ) VALOR_PERIODO_1,
( SELECT SUM(T.VALOR) FROM TABELA T1 WHERE T1.RESPONSAVEL = T.RESPONSAVEL AND T1.DT_INICIO BETWEEN :PI2 AND :PF2 ) VALOR_PERIODO_2,
( SELECT SUM(T.VALOR) FROM TABELA T1 WHERE T1.RESPONSAVEL = T.RESPONSAVEL AND T1.DT_INICIO BETWEEN :PI3 AND :PF3 ) VALOR_PERIODO_3,
( SELECT SUM(T.VALOR) FROM TABELA T1 WHERE T1.RESPONSAVEL = T.RESPONSAVEL AND T1.DT_INICIO BETWEEN :PI4 AND :PF4 ) VALOR_PERIODO_4
FROM
TABELA T
onde aqueles "
" seriam os 4 períodos iniciais e finais possíveis de entrada…
no ireport, vc pode configurar para só exibir a coluna se o valor dos parâmetros tiver sido passado…
tanto para o SQL ( com funções proprietárias do banco ) quanto para o ireport (com relatórios realmente dinâmicos) há soluções mais limpas para isso…
mas acredito que para o seu caso, a solução acima já seria o bastante
Concordo com TheKill, passar mais de 2 períodos em sql fica complicado, o melhor é passar apenas uma data inicial e uma final, e o sql poderá agrupar a resposta por mês ou semana, caso deseje.
A solução do Claudiom pode funcionar, mas você terá que tratar os nulos, quando o usário quiser informar menos de 4 períodos.
Você também poderia criar um subrelatório que representa um período, daí no relatório principal você chamaria o subrelatório passando a data inicial e final do período. Seriam no seu caso 4 chamadas para o subrelatório, cada uma com seu período. Assim você reusaria a solução que poderia ser usada para n períodos. Mas provavelmente seria um pouco mais lento do que retornar os valores dos 4 períodos numa única consulta.
BOA NOITE!!!
POXA VIDA PESSOAL… REALMENTE ESTA COMUNIDADE E VOCÊS SÃO FANTÁSTICOS…
Resolvi da forma como o fabiocsilva falou… criei alguns subrelatórios e um relatório principal… passando os parametros com as datas para os subrelatórios!
Gostaria de agradecer a todos pelas dicas!!!
Ahhh… a query enviada pelo Claudiom também funcionou! MUITO BACANA!!!
Vlw GUJ!