Contadores y totales por campo clave en un Sort

Cuando en un Sort queremos obtener totales o contadores por un campo clave, y además deseamos mostrarlos con formato de informe o con un texto de acompañamiento, podemos utilizar los parámetros de informe de la instrucción OUTFIL. Los analizamos en un artículo anterior, pero aquí solo vamos a usar los que necesitamos para nuestro propósito. Los contadores o totales pueden ir en un fichero aparte o bien junto con los registros de detalle, a continuación del último registro de cada valor del campo clave. Lógicamente hay que ordenar el fichero por el campo clave.

Por ejemplo, supongamos que tenemos un fichero de entrada (DD SORTIN) con la provincia en las posiciones de la 5 a la 19 y queremos obtener un fichero con el número de registros de cada provincia. La SYSIN a incluir en el Sort será la siguiente:


SORT FIELDS=(5,15,CH,A)             - Ordenación                           
OUTFIL FNAMES=SALIDA,               - DD de salida                        
REMOVECC,                           - Sin caracteres ANSI de impresión
NODETAIL,                           - Sin registros de detalle                
SECTIONS=(5,15,                     - Campo de ruptura                          
TRAILER3=('Provincia: '               
          ,5,15,                     
          ' Total registros: ',     
          COUNT=(EDIT=(III.IIT))))  - Contador y máscara de edición 

Para que el fichero de salida lleve no solo los contadores sino también los registros del fichero de entrada, basta con eliminar la instrucción NODETAIL.

Cuando se quiere obtener la suma de un campo numérico por campo clave, hay que cambiar el operador COUNT por TOTAL e indicar la posición de inicio y la longitud del campo a sumar. Por ejemplo, supongamos que el fichero del ejemplo anterior contiene un campo con el importe de las ventas en la posición 30 (numérico empaquetado de 5 posiciones). Con la siguiente SYSIN generaríamos el fichero de sumas por provincia:


SORT FIELDS=(5,15,CH,A)                      - Campo clave                           
OUTFIL FNAMES=SALIDA,                        - DD de salida                        
REMOVECC,                                    - Sin caracteres ANSI de impresión
NODETAIL,                                    - Sin registros de detalle                
SECTIONS=(5,15,                              - Campo de ruptura                          
TRAILER3=('Provincia: '              
          ,5,15,                     
          ' Total ventas: ',         
          TOTAL=(30,5,PD,EDIT=(IIIIIT,TT))   - Total y máscara 



Deja un comentario