Try This.
Brian
&&prep data
CREATE TABLE MyData (empno c(6),date c(10), A c(6), T n(5), U n(5))
APPEND FROM testsql.txt TYPE SDF &&copied and pasted from post
REPLACE ALL a WITH ALLTRIM(a)
ALTER TABLE MyData alter COLUMN date d
DELETE FOR VAL(empno)=0
pack
&&end data prep
CALCULATE MIN(date) TO mindate &&to be user defined
CALCULATE MAX(date) TO maxdate &&to be user defined
lnMonthsToCreate=(12*YEAR(maxdate)+MONTH(maxdate))-(12*YEAR(mindate)+MONTH(mindate))
lcSQLCMD=""
FOR lnDateCounter= 0 TO MIN(80,lnMonthsToCreate) &&80 is to catch a request for too many columns
ldVarDate=GOMONTH(CTOD(TRANSFORM(MONTH(mindate))+"/01/"+TRANSFORM(YEAR(mindate))),lnDateCounter)
*Build MAX(A) Query
lcSQLCMD=lcSQLCMD+",MAX(IIF(MONTH(date)="+TRANSFORM(MONTH(ldVarDate))+" AND "+;
"YEAR(date)="+TRANSFORM(YEAR(ldVarDate))+",A,' ')) "+;
"as A_"+left(cmonth(ldVarDate),3)+transform(year(ldVarDate))
*Build SUM(T) Query
lcSQLCMD=lcSQLCMD+",SUM(IIF(MONTH(date)="+TRANSFORM(MONTH(ldVarDate))+" AND "+;
"YEAR(date)="+TRANSFORM(YEAR(ldVarDate))+",T,00000)) "+;
"as T_"+left(cmonth(ldVarDate),3)+transform(year(ldVarDate))
*Build SUM(U) Query
lcSQLCMD=lcSQLCMD+",SUM(IIF(MONTH(date)="+TRANSFORM(MONTH(ldVarDate))+" AND "+;
"YEAR(date)="+TRANSFORM(YEAR(ldVarDate))+",U,00000)) "+;
"as U_"+left(cmonth(ldVarDate),3)+transform(year(ldVarDate))
ENDFOR
lcSQLCMD=RIGHT(lcSQLCMD,LEN(lcSQLCMD)-1)
SELECT dist empno+DTOC(date),empno,date,000 as days,&lcSQLCMD ;
GROUP BY 1 FROM MyData INTO TABLE results
lnEmpno="XXX"
SCAN
IF empno#lnEmpno
lndays=1
lnEmpno=empno
ENDIF
REPLACE days WITH lndays
lndays=lndays+1
ENDSCAN
GO TOP
BROWSE NOWAIT