>Thanks!  I will most likely go with the reference table(s) option, but I
>will test both.

One alternative that I don't think have been mentioned, Cornie, is EXECUTE 
BLOCK, which is simpler than a recursive CTE without requiring any extra table:

execute block returns (yearno integer, dayno integer, "SUM" integer)
as
  declare variable d date;
  declare variable dMax date;
begin
  select MIN(DT), MAX(DT)
  from CLIENT_INVOICES
  into :d, :dMax; /*or use fixed FROM and TO dates*/
  while (d <= dMax) do
  begin
    yearno = EXTRACT(YEAR from d);
    dayno  = EXTRACT(YEARDAY from d);
    select coalesce(sum(DUE), 0)
    from CLIENT_INVOICES
    where DT = :d
    into :"SUM";
    suspend;
    d=d+1;
  end
end;

This works on recent Firebird versions (though I would recommend using a 
different name than SUM).

HTH,
Set

Reply via email to