CREATE DBF cTest (Lev1 C(3), Lev2 C(3), Lev3 C(3), Descr C(20)) INSERT INTO cTest (Lev1, Descr) VALUES ("010","AAA") INSERT INTO cTest (Lev1, Lev2, Descr) VALUES ("010","002", "BBBBBB") INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","002","005", "CCCCCC") INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","002","013", "DDDDDD") INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","002","015", "EEEEEE") INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","002","016", "FFFFFF") INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","002","018", "GGGGGG") INSERT INTO cTest (Lev1, Lev2, Descr) VALUES ("010","003", "HHH") INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","003","005", "JJJJJJ") ... SELECT GetDesc(1, cTest.Lev1+cTest.Lev2+cTest.Lev3) AS Descr1,; GetDesc(2, cTest.Lev1+cTest.Lev2+cTest.Lev3) AS Descr2,; GetDesc(3, cTest.Lev1+cTest.Lev2+cTest.Lev3) AS Descr3; FROM cTest WHERE .NOT. EMPTY(Lev3); INTO CURSOR cTest1 BROWSE FUNCTION GetDesc(clevel, cCode) LOCAL ret_val DO CASE CASE cLevel == 1 SELECT cTest.Descr FROM cTest WHERE cTest.Lev1 == LEFT(cCode,3) INTO ARRAY aArr ret_val = aArr[1] CASE cLevel == 2 SELECT cTest.Descr FROM cTest WHERE cTest.Lev1 == LEFT(cCode,3) .AND. cTest.Lev2 = SUBSTR(cCode,4,3) INTO ARRAY aArr ret_val = aArr[1] CASE cLevel == 3 SELECT cTest.Descr FROM cTest WHERE cTest.Lev1 == LEFT(cCode,3) .AND. cTest.Lev2 = SUBSTR(cCode,4,3) .AND. cTest.Lev3 = RIGHT(cCode,3) INTO ARRAY aArr ret_val = aArr[1] ENDCASE RETURN PADR(ret_val, 30, " ")