BlogJCL

SUM FIELDS JCL: Suma de Registros y Eliminación de duplicados

El control de declaración SUM FIELDS JCL, indica que cuando dos registros tienen campos de control de un SORT o fusión iguales, se suman los campos de resumen, se coloca la suma en uno de los registros y se elimina el otro. Si está activada la opción EQUALS, se conserva el primer registro; si está activada la opción NOEQUALS, el registro conservado es impredecible.

Definición de SUM FIELDS
Declaración de control SUM FIELDS

SUM FIELDS JCL: Ejemplo de uso del comando

A continuación se muestra un ejemplo de SUM FIELDS JCL donde el programa ordena los registros por ID de cliente, suma las ventas para cada cliente y elimina los duplicados. El resultado es un archivo de salida con un único registro por cliente, mostrando la suma total de sus ventas.

//SORTJOB JOB ...
//STEP1 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=input.dataset,DISP=SHR
//SORTOUT DD DSN=output.dataset,DISP=(NEW,CATLG,DELETE),
//            UNIT=SYSDA,SPACE=(CYL,(5,5)),DCB=(RECFM=FB,LRECL=80)
//SYSIN DD *
  SORT FIELDS=(1,3,CH,A)
  SUM FIELDS=(10,3,ZD),FORMAT=BI
/*

Entrada de datos: El programa toma como entrada un archivo de datos llamado input.dataset. Este archivo contiene información sobre ventas, con columnas para el ID del cliente, el nombre, el apellido y la cantidad de ventas.

Ordenación: El primer paso del programa es ordenar los registros del archivo de entrada por el ID del cliente (ID) de manera ascendente. Esto se realiza utilizando la instrucción SORT FIELDS=(1,3,CH,A), que especifica que los registros deben ordenarse utilizando los primeros 3 caracteres (la columna ID) como clave de ordenación.

Suma de campos: Luego, el programa utiliza la instrucción SUM FIELDS=(10,3,ZD),FORMAT=BI para sumar los valores de la columna Ventas para cada ID de cliente. La parte (10,3,ZD) indica que se sumará el campo de la posición 10 al 12 del registro, que representa las ventas, y FORMAT=BI especifica que estos valores deben tratarse como enteros binarios sin signo.

Salida de datos: El resultado final se escribe en un archivo llamado output.dataset, que contiene los registros únicos con la suma acumulada en la columna Ventas para cada ID de cliente.

Archivo de entrada (input.dataset):

ID       Nombre    Apellido  Ventas
------------------------------------
001      Juan      Pérez      100
002      María     López      150
001      Juan      Pérez      200
003      Carlos    García     300
002      María     López      250

Resultado después del procesamiento (output.dataset):

ID       Nombre    Apellido  Ventas
------------------------------------
001      Juan      Pérez      300
002      María     López      400
003      Carlos    García     300

Formatos y Longitudes de Campos de Resumen de SUM FIELDS JCL

Código de Formato de Campos de ResumenLongitudDescripción
BI2, 4, o 8 bytesBinario no signado
FI2, 4, o 8 bytesPunto fijo con signo
FL4, 8, o 16 bytesPunto flotante hexadecimal con signo
PD1 a 16 bytesDecimal empaquetado con signo
ZD1 a 31 bytesDecimal zonal con signo
Tabla de formatos y longitudes en SUM FIELDS

SUM FIELDS NONE: Control de duplicados

El comando SUM FIELDS NONE en JCL se utiliza para eliminar registros duplicados basados en una clave de ordenación especificada durante la operación de ordenación y resumen de datos. Cuando se utiliza SUM FIELDS NONE, el sistema solo retiene un único registro para cada valor único de la clave de ordenación, eliminando así los registros duplicados.

Ejemplo de SUM FIELDS NONE

A continuación se muestra un ejemplo simplificado de cómo usar SUM FIELDS NONE en un control de JCL para eliminar registros duplicados basados en una clave de ordenación:

Supongamos que tienes un archivo de entrada llamado input.dataset con la siguiente estructura:

Fichero de entrada

ID       Nombre    Apellido
----------------------------
001      Juan      Pérez
002      María     López
001      Juan      Pérez
003      Carlos    García
002      María     López

Y se quieren eliminar los registros duplicados basados en el campo «ID». Puedes usar SUM FIELDS NONE para lograr esto en tu JCL:

//SORTJOB JOB …
//STEP1 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=input.dataset,DISP=SHR
//SORTOUT DD DSN=output.dataset,DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(5,5)),DCB=(RECFM=FB,LRECL=80)
//SYSIN DD *
SORT FIELDS=(1,3,CH,A)
SUM FIELDS=NONE
/*

Después de ejecutar este JCL, el archivo de salida output.dataset contendrá solo los registros únicos basados en el campo «ID»:

Fichero de salida

ID       Nombre    Apellido
----------------------------
001      Juan      Pérez
002      María     López
003      Carlos    García

Como se muestra en el ejemplo, los registros duplicados basados en el campo «ID» se han eliminado, manteniendo solo una instancia de cada valor único de la clave de ordenación. Esto simplifica y reduce la redundancia en el conjunto de datos de salida.