Cómo: Referencia: |
Idiomas disponibles: informes, Maintain
La función DECODE asigna valores en base al valor codificado de un campo de entrada. DECODE ofrece un modo práctico de asignar un valor de mayor significado al valor codificado de un campo. Por ejemplo, el campo GENDER puede incluir el código F para las empleadas y M, para los empleados, lo que resulta en un almacenamiento más eficiente (por ejemplo, un carácter en vez de seis para mujer). DECODE expande (descodifica) estos valores para garantizar la correcta interpretación de los informes.
Para usar DECODE puede introducir valores directamente en la función o leerlos desde un archivo independiente.
El uso de DECODE junto con Maintain es limitado. Para más información sobre la descodificación de valores con valores de pila subindexados, consulte SELECTS: Cómo descodificar un valor de una pila.
DECODE fieldname(code1 result1 code2 result2...[ELSE default ]); DECODE fieldname(filename ...[ELSE default]);
donde:
Alfanumérico o numérico
Es el nombre del campo de entrada.
Alfanumérico o numérico
Es el valor codificado comparado por DECODE con el valor de fieldname. Si el valor tiene insertados espacios en blanco, comas u otros caracteres especiales, debe estar entre comillas simples. Cuando DECODE encuentra el valor especificado, devuelve el resultado correspondiente. Cuando el código se compara con el valor del nombre del campo, el código y el nombre deben estar en el mismo formato.
Alfanumérico o numérico
Es el valor devuelto correspondiente al código. Si el valor tiene insertados espacios en blanco o comas, o contiene un número negativo, debe estar entre comillas simples. No utilice las comillas dobles (").
Si el resultado se presenta en formato alfanumérico, debe ser una cadena no nula que no esté en blanco. El formato del resultado debe corresponderse con el tipo de datos de la expresión.
Alfanumérico o numérico
Es el valor devuelto como resultado para los códigos no coincidentes. El formato debe ser el mismo que el de result. Si omite un valor predeterminado, DECODE asigna un espacio o un cero a los códigos que no coinciden.
Alfanumérico
Es el nombre del archivo en que se almacenan las parejas de código/resultado. Cada registro del archivo debe incluir una pareja.
Puede usar hasta 40 líneas para definir el código y las parejas de resultados de cualquier función DECODE, o 39 si también utiliza una frase ELSE. Emplee una coma o un espacio para separar el código del resultado o una pareja de la otra.
Nota: DECODE no presenta un argumento output.
EDIT extrae el primer caracter del campo CURR_JOBCODE y después, DECODE devuelve ADMINISTRATIVE o DATA PROCESSING, dependiendo del valor extraído.
TABLE FILE EMPLOYEE
PRINT CURR_JOBCODE AND COMPUTE
DEPX_CODE/A1 = EDIT(CURR_JOBCODE, '9$$'); NOPRINT AND COMPUTE
JOB_CATEGORY/A15 = DECODE DEPX_CODE(A 'ADMINISTRATIVE'
B 'DATA PROCESSING');
BY LAST_NAME
WHERE DEPARTMENT EQ 'MIS';
END
La salida es:
LAST_NAME CURR_JOBCODE JOB_CATEGORY --------- ------------ ------------ BLACKWOOD B04 DATA PROCESSING CROSS A17 ADMINISTRATIVE GREENSPAN A07 ADMINISTRATIVE JONES B03 DATA PROCESSING MCCOY B02 DATA PROCESSING SMITH B14 DATA PROCESSING
Esto permite usar el archivo para retener literales de filtraje citados en la condición de filtraje:
IF field IS (filename)
y como archivo de literales de un criterio IF especificado en una expresión computacional. Por ejemplo:
TAKE = DECODE SELECT (filename ELSE 1);
VALUE = IF TAKE IS 0 THEN... ELSE...;
TAKE es 0 para los valores SELECT del archivo literal y 1 para los demás casos. La computación VALUE se lleva a cabo como si la expresión fuese:
IF SELECT (filename) THEN... ELSE...;
El siguiente ejemplo consta de dos partes. La primera parte crea un archivo con una lista de ids. y lee el archivo de origen EDUCFILE. La segunda lee el origen de datos EMPLOYEE y asigna un 0 a los empleados que hayan dado clases, y un 1 a los que no. El archivo HOLD sólo tiene una columna de valores; DECODE asigna el valor 0 a un empleado cuyo EMP_ID esté presente en el archivo y un,1 cuando no aparece EMP_ID.
TABLE FILE EDUCFILE PRINT EMP_ID ON TABLE HOLD END
TABLE FILE EMPLOYEE
PRINT EMP_ID AND LAST_NAME AND FIRST_NAME AND COMPUTE
NOT_IN_LIST/I1 = DECODE EMP_ID(HOLD ELSE 1);
WHERE DEPARTMENT EQ 'MIS';
END
La salida es:
EMP_ID LAST_NAME FIRST_NAME NOT_IN_LIST ------ --------- ---------- ----------- 112847612 SMITH MARY 0 117593129 JONES DIANE 0 219984371 MCCOY JOHN 1 326179357 BLACKWOOD ROSEMARIE 0 543729165 GREENSPAN MARY 1 818692173 CROSS BARBARA 0
WebFOCUS |