LOCAL dIncDate, aDateRange[1,2], cDateToStick, cMonthPart >>SELECT MIN(DATE(val(cYear),val(cMonth),1)) as dmin, ; >> MAX(DATE(val(cYear),val(cMonth),1)) as dMax ; >> FROM InputTable ; >> INTO ARRAY aDateRange && Save min and max 1st of month in array >> >>SELECT 0 >>CREATE CURSOR tblPeriods ( cYearMonth C(6), ; >> cYear C(4), ; >> cMonth C(2), ; >> cQuarter C(2) ) >> >>dIncDate = aDateRange[1,1] && Start at first month >>DO WHILE dIncDate <= aDateRange[1,2] && For each month through the last >> cDateToStick = DTOS(dIncDate) && Convert to YYYYMMDD >> cMonthPart = SUBST(cDateToStick,5,2) && Snag MM >> >> INSERT INTO tblPeriods VALUES ( left(cDateToStick,6), ; >> left(cDateToStick,4), ; >> cMonthPart, ; >> 'Q' + TRANSFORM(CEILING(VAL(cMonthPart)/3)) ) >> >> dIncDate = GOMONTH(dIncDate,1) && next month >>ENDDO>