Как мы можем использовать сумму и максимум одновременно, когда группируем по данным? - PullRequest
0 голосов
/ 27 мая 2018

Как мы можем суммировать сумму и получить максимальную дату одновременно, когда группа по идентификатору в JCL

Ввод:

Id   Amount Date
--------------------
123  200    20180516
123  300    20180520
456  100    20180616
456  700    20180420

Ожидаемый результат:

Id   Amount Date
--------------------
123  500    20180520
456  800    20180616

Что я уже пробовал:

SORTST5  EXEC PGM=SORT
SYSOUT   DD   SYSOUT=*
SYSPRINT DD   SYSOUT=*
SORTIN   DD   DSN=&VNTMPççWRK.INWORK,DISP=SHR
SORTOUT  DD   DSN=&VNTMP..WRK.OUTWORK.OUT.FRM,
              DISP=(,CATLG,DELETE),
              RECFM=FB,LRECL=84, SPACE=(CYL,(100,100), RLSE)
SYSIN    DD   *
SORT FIELDS=(1,3,PD,A)
SUM  FIELDS=(4,3,PD)

1 Ответ

0 голосов
/ 28 мая 2018

JCL не является исполняемым файлом, и вы не можете манипулировать датой в JCL без таких утилит, как SORT.

Я использовал ICETOOL (утилиту) в JCL для достижения ожидаемого результата.Первый оператор Control отсортирует входные данные с использованием идентификатора (в порядке возрастания) и даты (в порядке убывания).Второй оператор управления будет делать SUM FIELDS на выходе, полученном с использованием первого оператора управления.

//STEP1    EXEC PGM=ICETOOL                    
//TOOLMSG  DD SYSOUT=*                       
//DFMSG    DD SYSOUT=*                         
//TOOLIN   DD *                               
  SORT FROM(INDD) TO(OUTDD1) USING(CTL1)    
  SORT FROM(OUTDD1) TO(OUTDD2) USING(CTL2)  
//INDD     DD *                                 
123 200 20180516                            
123 300 20180520                            
456 700 20180420                            
456 100 20180616                            
//OUTDD1   DD DSN=XXX.ICETOOL.OUTDD1,         
//         DISP=(,CATLG,DELETE),              
//         SPACE=(CYL,(100,0),RLSE),          
//         DCB=(LRECL=80,RECFM=FB,BLKSIZE=0)  
//OUTDD2   DD DSN=XXX.ICETOOL.OUTDD2,         
//         DISP=(,CATLG,DELETE),              
//         SPACE=(CYL,(100,0),RLSE),          
//         DCB=(LRECL=80,RECFM=FB,BLKSIZE=0)  
//SSMSG    DD SYSOUT=*                         
//SYSOUT   DD SYSOUT=*                        
//CTL1CNTL DD *                             
 SORT FIELDS=(1,3,ZD,A,9,8,ZD,D)            
/*                                          
//CTL2CNTL DD *                             
 SORT FIELDS=(1,3,ZD,A)                     
 SUM FIELDS=NONE                            
/*
...