Criar relatório de freqüência de associados

Delphi

21/10/2010

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
Silvio Morelo

Silvio Morelo

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

21/10/2010

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

GOSTEI 0
Silvio Morelo

Silvio Morelo

21/10/2010


 
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.
GOSTEI 0
POSTAR