Fórum Criar relatório de freqüência de associados #389101
21/10/2010
0
Pessoal,
Preciso criar um relatório de freqüência de associado.Com a ajuda de alguns colegas, eu criei um select com a seguinte instrução:
Select dia, mes, count(1) as quantidade, case semana when 0 then 'DOM' when 1 then 'SEG' when 1 then 'TER' when 1 then 'QUA' when 1 then 'QUI' when 1 then 'SEX' when 1 then 'SAB' end
From (select extract(day from ac001.dtentrada) as dia, extract(month from ac001.dtentrada) as mes, extract(weekday from ac001.dtentrada) as semana, ac001.idsocio
from ac001 where dtentrada BETWEEN :PAR_DATAINI AND PAR_DATAFIN group by extract(month from ac001.dtentrada), extract(day from ac001.dtentrada), extract(weekday from ac001.dtentrada), ac001.idsocio)
group by dia, mes, semana order by 2, 1
Esse select me retornou exatamente o que eu preciso porem da seguinte forma, por exemplo:
dia mes quantidade semana29 09 1300 SEX30 09 1200 SAB19 10 1450 TER20 10 1200 QUA21 10 1500 QUI
Agora vem a pergunta, como criar um relatório no FastReport ou ClientDataSet para que possa ler e montar o layout da seguinte maneira:
09 - Setembro 01 02 03 04 05 06 07 08 09.... 20 21 22.... 29 30 31 SEX SAB 1300 1200
10 - Outubro 01 02 03 04 05 06 07 08 09.... 20 21 22.... 29 30 31 TER QUA QUI 1450 1200 1500
Obrigado pela ajuda
Preciso criar um relatório de freqüência de associado.Com a ajuda de alguns colegas, eu criei um select com a seguinte instrução:
Select dia, mes, count(1) as quantidade, case semana when 0 then 'DOM' when 1 then 'SEG' when 1 then 'TER' when 1 then 'QUA' when 1 then 'QUI' when 1 then 'SEX' when 1 then 'SAB' end
From (select extract(day from ac001.dtentrada) as dia, extract(month from ac001.dtentrada) as mes, extract(weekday from ac001.dtentrada) as semana, ac001.idsocio
from ac001 where dtentrada BETWEEN :PAR_DATAINI AND PAR_DATAFIN group by extract(month from ac001.dtentrada), extract(day from ac001.dtentrada), extract(weekday from ac001.dtentrada), ac001.idsocio)
group by dia, mes, semana order by 2, 1
Esse select me retornou exatamente o que eu preciso porem da seguinte forma, por exemplo:
dia mes quantidade semana29 09 1300 SEX30 09 1200 SAB19 10 1450 TER20 10 1200 QUA21 10 1500 QUI
Agora vem a pergunta, como criar um relatório no FastReport ou ClientDataSet para que possa ler e montar o layout da seguinte maneira:
09 - Setembro 01 02 03 04 05 06 07 08 09.... 20 21 22.... 29 30 31 SEX SAB 1300 1200
10 - Outubro 01 02 03 04 05 06 07 08 09.... 20 21 22.... 29 30 31 TER QUA QUI 1450 1200 1500
Obrigado pela ajuda
Silvio Morelo
Curtir tópico
+ 0
Responder
Posts
21/10/2010
Emerson Nascimento
não vou responder a sua pergunta, mas talvez melhore a performance da sua pesquisa... evite usar subselects. elas muitas vezes são imprecindíveis, mas acho que não é o seu caso. você pode fazer tudo numa única instrução:
select
extract(day from ac001.dtentrada) as dia,
extract(month from ac001.dtentrada) as mes,
(case (weekday from ac001.dtentrada)
when 0 then 'DOM'
when 1 then 'SEG'
when 2 then 'TER'
when 3 then 'QUA'
when 4 then 'QUI'
when 5 then 'SEX'
when 6 then 'SAB'
end) as semana,
count(distinct ac001.idsocio) as quantidade
from
ac001
where
dtentrada BETWEEN :PAR_DATAINI AND :PAR_DATAFIN
group by
extract(month from ac001.dtentrada),
extract(day from ac001.dtentrada),
extract(weekday from ac001.dtentrada)
order by
2, 1
select
extract(day from ac001.dtentrada) as dia,
extract(month from ac001.dtentrada) as mes,
(case (weekday from ac001.dtentrada)
when 0 then 'DOM'
when 1 then 'SEG'
when 2 then 'TER'
when 3 then 'QUA'
when 4 then 'QUI'
when 5 then 'SEX'
when 6 then 'SAB'
end) as semana,
count(distinct ac001.idsocio) as quantidade
from
ac001
where
dtentrada BETWEEN :PAR_DATAINI AND :PAR_DATAFIN
group by
extract(month from ac001.dtentrada),
extract(day from ac001.dtentrada),
extract(weekday from ac001.dtentrada)
order by
2, 1
Responder
Gostei + 0
22/10/2010
Silvio Morelo
Amerson, obrigado pela dica.
Só tem uma coisa, quando eu informo os valores dos parâmetros pelo IB Expert por exemplo, a consulta retorna vazia, porem se eu colocar da maneira abaixo a consulta retorna com as informações corretas?
ac001.dtentrada BETWEEN '2010/01/01' AND '2010/12/31' -- Consulta retorna as informações corretasdtentrada BETWEEN :PAR_DATAINI AND :PAR_DATAFIN -- Não retorna nada.
Obrigado.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)