Dúvidas quanto a utilização do IReports[RESOLVIDO]

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 ":stuck_out_tongue: " 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!