Consultor Eletrônico



Kbase 11474: Sample Code WHERE & SORT with IF...THEN...ELSE in a BREAK BY
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   5/10/1998
Sample Code WHERE & SORT with IF...THEN...ELSE in a BREAK BY

/* THIS PROCEDURE ILLUSTRATES THE IF...THEN...ELSE FUNCTION.
EACH CONDITION **MUST** HAVE AN "ELSE" TO DEFAULT TO, AND
THE FIELDS TESTED ON FOR THE "BY" PHRASE MUST HAVE THE SAME
DATA TYPE; IN THIS CASE, ALL ARE CHARACTER FIELDS.
UP TO 8 NESTED IF...THEN...ELSE FUNCTIONS ARE SUPPORTED. */

DEF VAR Choice AS INT FORMAT "9".
SET Choice HELP
"1 = Name, 2 = City, 3 = St, 4 = Address, 5 = Zip, else Customer #".

FOR EACH customer BREAK BY
IF Choice = 1 THEN name ELSE
(IF Choice = 2 THEN city ELSE
(IF Choice = 3 THEN st ELSE
(IF Choice = 4 THEN address ELSE
(IF Choice = 5 THEN STRING(zip,"99999") ELSE
STRING(cust-num,"99"))))):
DISPLAY name cust-num address city st zip.
END.
/* Don't forget the format option on STRING conversions, otherwise
10, which starts with a "1" would come before "2".
Also, PROGRESS must know the index to use when a procedure is
compiled. Since the selection above is a runtime value, the
IF . . . THEN . . . ELSE function used in a BY clause will select
the same index and do sequential processing regardless of the
results of the Choice selected.
*/
/* r-ifelsf.p */
/* YOU CAN ALSO USE THIS FUNCTION TO FORCE THE SORT SEQUENCE WITHIN
A FIELD TO SUPERCEDE THE NORMAL "BY" SORT SEQUENCE. IN THIS
EXAMPLE, THE DATA VALUE HELD WITHIN THE sales-region FIELD IS
TESTED, AND ALL THE RECORDS WITH "East" IN THAT FIELD ARE
SORTED AHEAD OF THE "Central" sales-region RECORDS. THE
CONSTANTS 1, 2, AND 3 REPRESENT THE RELATIVE POSITION IN THE
SORT SEQUENCE OF RECORDS MATCHING THAT DATA VALUE */
FOR EACH customer
BY IF sales-region = "East" THEN 1 ELSE
(IF sales-region = "Central" THEN 2 ELSE 3):
DISPLAY sales-region name sales-rep.
END.

You can also use the IF...THEN...ELSE function in the object of a
WHERE clause. This is illustrated below:

DEF VAR st-choice AS CHAR FORMAT "X" LABEL "Start Letter of State".
UPDATE st-choice.

FOR EACH customer WHERE st BEGINS (IF st-choice > "" THEN
st-choice
ELSE ""):
DISPLAY cust-num name city st zip.
END.

Progress Software Technical Support Note # 11474