SELECT a.ifspid, b.svc_type, COUNT(*) AS total_cnt ; FROM ifsp a, ifsp_svc b ; WHERE a.ifspid= b.ifspid ; GROUP BY a.ifspid ; INTO CURSOR Step1 SELECT a.ifspid, b.svc_type, b.freq, b.startdate, 0 as cnt_me, c.total_cnt ; FROM ifsp a, ifsp_svc b, step1 c ; WHERE a.ifspid= b.ifspid ; AND a.ifspid= c.ifspid ; ORDER by a.ifspid, b.svc_type ; INTO CURSOR Step2 USE DBF('Step2') AGAIN ALIAS Step3 IN 0 SELECT Step3 LOCAL ipointer DO WHILE NOT EOF() ipointer = step3.total_cnt FOR m.cnt_me = 1 to ipointer GATHER MEMVAR FIELD cnt_me SKIP ENDFOR SCATTER MEMVAR FIELD cnt_me ENDDO SELECT ifspid, svc_type AS svc_typ1, freq AS freq1, startdate AS start1, ; 00 AS svc_typ2, 00 AS freq2, { / / } AS start2, ; 00 AS svc_typ3, 00 AS freq3, { / / } AS start3 ; FROM step3 ; WHERE cnt_me = 1 ; UNION ; SELECT ifspid, 00 AS svc_typ1, 00 AS freq1, { / / } AS start1, ; svc_type AS svc_typ2, freq AS freq2, startdate AS start2, ; 00 AS svc_typ3, 00 AS freq3, { / / } AS start3 ; FROM step3 ; WHERE cnt_me = 2 ; UNION ; SELECT ifspid, 00 AS svc_typ1, 00 AS freq1, { / / } AS start1, ; 00 AS svc_typ2, 00 AS freq2, { / / } AS start2, ; svc_type AS svc_typ3, freq AS freq3, startdate AS start3 ; FROM step3 ; WHERE cnt_me = 3 ; INTO CURSOR step4 SELECT ifspid, SUM(svc_typ1) AS svc_typ1, SUM(freq1) AS freq1, ; MAX(start1) AS start1, SUM(svc_typ2) AS svc_typ2, SUM(freq2) AS freq2, ; MAX(start2) AS start2, SUM(svc_typ3) AS svc_typ3, SUM(freq3) AS freq3 ; FROM step4 ; GROUP BY ifspid INTO CURSOR RoxResultLike I said... no joy. Maybe somebody else can look at this and pipe up a better way. HTH.