Como: Referência: |
Linguagens Disponíveis: Reporting, Maintain
A função DECODE designa valores com base no valor codificado de um campo de entrada. DECODE é útil para fornecer um valor mais significativo a um valor codificado em um campo. Por exemplo, o campo GENDER pode ter o código F para funcionárias (feminino) e M para funcionários homens (masculino) para que o armazenamento seja eficiente 9por exemplo, um caractere em vez de oito para 'feminino'). DECODE expande (decodifica) estes valores para garantir a interpretação correta em um relatório.
Você pode utilizar o DECODE fornecendo valores diretamente na função ou lendo valores a partir de um arquivo separado.
DECODE fieldname(code1 result1 code2 result2...[ELSE default ]); DECODE fieldname(filename ...[ELSE default]);
onde:
Alfanuméricos ou Numéricos
É o nome do campo de entrada.
Alfanuméricos ou Numéricos
É o valor codificado que DECODE compara ao valor atual de fieldname. Se o valor possuir espaços, vírgulas ou outros caracteres especiais incorporados, coloque-os entre aspas simples. Quando DECODE localiza o valor especificado, ele retorna o resultado correspondente. Quando o código é comparado ao valor do nome do campo, o código e o nome do campo devem ter o mesmo formato".
Alfanuméricos ou Numéricos
É o valor retornado que corresponde ao código. Se o resultado possuir espaços ou vírgulas incorporados ou contiver um número negativo, coloque-os entre aspas simples. Não utilize aspas duplas (").
Se o resultado estiver apresentado no formato alfanumérico, esta string não poderá ser nula ou em branco. O formato do resultado deve corresponder ao tipo de dados da expressão.
Alfanuméricos ou Numéricos
É o valor retornado como resultado para códigos não correspondentes. O formato deve ser o mesmo do formato de result. Ao omitir um valor padrão, DECODE atribui um espaço em branco ou zero para códigos não correspondentes.
Alfanumérico
É o nome do arquivo no qual os códigos/pares de resultados são armazenados. Cada registro no arquivo deve conter um par.
Você pode utilizar até 40 linhas para definir o código e pares de resultados para qualquer função DECODE ou 39 linhas caso também utilize uma frase ELSE. Utilize uma vírgula ou espaço para separar o código do resultado ou um par de outro.
Observação: DECODE não possui um argumento output.
A função EDIT extrai o primeiro caractere do campo CURR_JOBCODE e, em seguida, a função DECODE exibe ADMINISTRATIVE ou DATA PROCESSING, dependendo do 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
A saída é:
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
Isto possibilita a utilização do arquivo para armazenar as literais de triagem com referência na condição de triagem:
IF field IS (filename)
e como um arquivo de litarias para um critério IF especificado na expressão computacional. Por exemplo:
TAKE = DECODE SELECT (filename ELSE 1);
VALUE = IF TAKE IS 0 THEN... ELSE...;
TAKE é 0 para valores SELECT encontrados no arquivo literal e 1 para todos os outros casos. A computação VALUE é executada como se a expressão fosse:
IF SELECT (filename) THEN... ELSE...;
O exemplo a seguir possui duas partes. A primeira parte cria uma lista de IDs e lê a fonte de dados EDUCFILE. A segunda parte lê a fonte de dados EMPLOYEE e atribui 0 para estes funcionários que tiveram aulas e 1 para os funcionários que não participaram das aulas. O arquivo HOLD contém apenas uma coluna de valores. Portanto, DECODE atribui o valor 0 a um funcionário cujo EMP_ID aparece no arquivo e 1 quando o EMP_ID não aparece no arquivo.
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
A saída é:
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
Information Builders |