/* TOTAL TO ... ON ... FIELDS ... via PP rule. */ PROCEDURE Main() LOCAL aStruct, n FErase( "src.dbf" ) FErase( "dst.dbf" ) /* Sales records, sorted by department. */ aStruct := { ; { "DEPT", "C", 12, 0 }, ; { "EMP", "C", 12, 0 }, ; { "AMT", "N", 8, 2 }, ; { "QTY", "N", 4, 0 } } dbCreate( "src.dbf", aStruct ) USE src.dbf NEW EXCLUSIVE ALIAS s /* engineering: 100+200=300, qty 5+8=13 */ dbAppend() ; FieldPut(1,"engineering"); FieldPut(2,"alice") ; FieldPut(3,100) ; FieldPut(4,5) dbAppend() ; FieldPut(1,"engineering"); FieldPut(2,"bob") ; FieldPut(3,200) ; FieldPut(4,8) /* sales: 50+150+25=225, qty 1+3+1=5 */ dbAppend() ; FieldPut(1,"sales") ; FieldPut(2,"carol") ; FieldPut(3,50) ; FieldPut(4,1) dbAppend() ; FieldPut(1,"sales") ; FieldPut(2,"dan") ; FieldPut(3,150) ; FieldPut(4,3) dbAppend() ; FieldPut(1,"sales") ; FieldPut(2,"eve") ; FieldPut(3,25) ; FieldPut(4,1) /* hr: 80, qty 2 */ dbAppend() ; FieldPut(1,"hr") ; FieldPut(2,"frank") ; FieldPut(3,80) ; FieldPut(4,2) dbCommit() ? "--- TOTAL TO dst ON dept FIELDS amt, qty ---" dbGoTop() TOTAL TO dst.dbf ON s->dept FIELDS amt, qty dbCloseArea() USE dst.dbf NEW EXCLUSIVE COUNT TO n ? "Group rows =", n, "(expect 3 = engineering, sales, hr)" dbGoTop() ? "1.", AllTrim(FieldGet(1)), "amt:", FieldGet(3), "qty:", FieldGet(4), "(expect engineering 300 13)" dbSkip() ? "2.", AllTrim(FieldGet(1)), "amt:", FieldGet(3), "qty:", FieldGet(4), "(expect sales 225 5)" dbSkip() ? "3.", AllTrim(FieldGet(1)), "amt:", FieldGet(3), "qty:", FieldGet(4), "(expect hr 80 2)" dbCloseArea() FErase( "src.dbf" ) FErase( "dst.dbf" ) ? "DONE" RETURN