SELECT VTYPE, COUNT(*) AS REC ; FROM LEDGER ; GROUP BY VTYPE ; ORDER BY REC DESC INTO CURSOR L2 * SELECT L1.VTYPE, L2.REC ,; CAST(IIF(L1.VTYPE='D',L1.DATE ,{}) AS D(10) ) AS DR_DATE ,; CAST(IIF(L1.VTYPE='D',L1.VNO ,0) AS N(06) ) AS DR_VNO ,; CAST(IIF(L1.VTYPE='D',L1.AMOUNT,0 ) AS N(12,2)) AS DR_AMOUNT,; CAST(IIF(L1.VTYPE='C',L1.DATE ,{}) AS D(10) ) AS CR_DATE ,; CAST(IIF(L1.VTYPE='C',L1.VNO ,0) AS N(06) ) AS CR_VNO ,; CAST(IIF(L1.VTYPE='C',L1.AMOUNT,0 ) AS N(12,2)) AS CR_AMOUNT ; FROM LEDGER L1 ; RIGHT JOIN L2 ON L1.VTYPE = L2.VTYPE ; ORDER BY L2.REC DESC, DATE ; INTO CURSOR L3 GO TOP * SELECT L2 GO TOP lcVtype = L2.VTYPE * SELECT DR_DATE, DR_VNO, DR_AMOUNT, CR_DATE, CR_VNO, CR_AMOUNT ; FROM L3 WHERE VTYPE = lcVtype INTO CURSOR LGR READWRITE * SELECT DR_DATE, DR_VNO, DR_AMOUNT, CR_DATE, CR_VNO, CR_AMOUNT, VTYPE ; FROM L3 WHERE VTYPE != lcVtype INTO CURSOR L4 * SELECT LGR GO TOP * SELECT L4 GO TOP DO WHILE !EOF() SELECT LGR SCATTER MEMVAR IF L4.VTYPE = 'D' M.DR_DATE = L4.DR_DATE M.DR_VNO = L4.DR_VNO M.DR_AMOUNT= L4.DR_AMOUNT ELSE M.CR_DATE = L4.CR_DATE M.CR_VNO = L4.CR_VNO M.CR_AMOUNT= L4.CR_AMOUNT ENDIF GATHER MEMVAR SKIP SELECT L4 SKIP ENDDO * USE IN L2 USE IN L3 USE IN L4 USE IN LEDGER