IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

Get child record count for every root element - Syncsort


IBM Mainframe Forums -> JCL & VSAM
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
Vijayakumar Mani

New User


Joined: 24 Oct 2007
Posts: 11
Location: Salem

PostPosted: Fri May 30, 2008 11:23 am
Reply with quote

Is there any way to get the count of child records for individual parent using Syncsort?

Sample Input:
Code:
ROOT1  DATA1
CHILD1
CHILD2
CHILD3
.
.
ROOT2  DATA2
CHILD1
CHILD2
CHILD3
.
.



Desired Output:
Code:
DATA1 Child Count
DATA2 Child Count
.
.
.


Thanks,
Vijay
Back to top
View user's profile Send private message
ParagChouguley

Active User


Joined: 03 Feb 2007
Posts: 175
Location: PUNE(INDIA)

PostPosted: Fri May 30, 2008 2:08 pm
Reply with quote

Hi,
Here is a sysncsort job for your requirement. It may require a change based on your actual data.
Code:

//S1      EXEC PGM=SYNCTOOL             
//TOOLMSG DD SYSOUT=*                 
//DFSMSG  DD SYSOUT=*                 
//IN1     DD *                         
ROOT1  DATA1                           
CHILD1                                 
CHILD2                                 
CHILD3                                 
ROOT2  DATA2                           
CHILD1                                 
CHILD2                                 
ROOT3  DATA3                           
CHILD1                                 
CHILD2                                 
CHILD3                                 
CHILD4                                 
CHILD5                                 
ROOT4  DATA4
ROOT5  DATA5
ROOT6  DATA6
CHILD1       
ROOT7  DATA7
/*                                     
//OUT1    DD DSN=OUTPUT-FILE-NAME,     
//      DSORG=PS,RECFM=FB,             
//      DISP=(NEW,CATLG,DELETE)         
//TEMP1   DD DSN=&&TEMP1,               
//      DSORG=PS,RECFM=FB,             
//      DISP=(NEW,CATLG,DELETE)         
//TEMP2   DD DSN=&&TEMP2,               
//      DSORG=PS,RECFM=FB,             
//      DISP=(NEW,CATLG,DELETE)         
//TEMP3   DD DSN=&&TEMP3,               
//      DSORG=PS,RECFM=FB,             
//      DISP=(NEW,CATLG,DELETE)         
//TOOLIN  DD *                                                       
    SORT FROM(IN1) TO(TEMP1) USING(SRT1)                             
    SORT FROM(TEMP1) TO(TEMP2) USING(SRT2)                           
    SPLICE FROM(TEMP2) TO(TEMP3) ON(101,10,ZD) WITH(91,10) KEEPNODUPS
    COPY FROM(TEMP3) TO(OUT1) USING(SRT3)                             
/*                                                                   
//SRT1CNTL DD *                                                       
    INREC  IFTHEN=(WHEN=INIT,                                         
             BUILD=(1,80,SEQNUM,10,ZD,SEQNUM,10,ZD,RESTART=(1,4))),   
           IFTHEN=(WHEN=(1,4,CH,EQ,C'ROOT'),                         
             BUILD=(1,100,81,10,C'A')),                               
           IFTHEN=(WHEN=(1,5,CH,EQ,C'CHILD'),                         
             BUILD=(1,100,(81,10,ZD,SUB,91,10,ZD),EDIT=(TTTTTTTTTT), 
                  C'B'))                                             
    SORT FIELDS=(101,11,ZD,A,91,10,ZD,D)                             
    OUTREC IFTHEN=(WHEN=(111,1,CH,EQ,C'A'),                           
             OVERLAY=(91:C'0000000000'))       
/*                                             
//*                                             
//SRT2CNTL DD *                                 
  SORT FIELDS=(101,11,ZD,A)                     
  SUM FIELDS=NONE                               
/*                                             
//SRT3CNTL DD *                                 
  OPTION COPY                                   
  OUTREC FIELDS=(8,7,91,10)                     
/*                                             



Output:
Code:

DATA1  0000000003
DATA2  0000000002
DATA3  0000000005
DATA4  0000000000
DATA5  0000000000
DATA6  0000000001
DATA7  0000000000


--Parag
Back to top
View user's profile Send private message
Vijayakumar Mani

New User


Joined: 24 Oct 2007
Posts: 11
Location: Salem

PostPosted: Fri May 30, 2008 4:22 pm
Reply with quote

Hi Parag,
Thank you for your valuable reply. It is working fine.

How to get the data alone for the specific count(Say 5) ?

Code:
DATA1  0000000003
DATA2  0000000002
DATA3  0000000005
DATA4  0000000000
DATA5  0000000000
DATA6  0000000001
DATA7  0000000000


Output should be DATA3 since the count is 5. Count is not needed in the output.

Is it possible to get this output in the same step that is used above to get the count?
Back to top
View user's profile Send private message
ParagChouguley

Active User


Joined: 03 Feb 2007
Posts: 175
Location: PUNE(INDIA)

PostPosted: Fri May 30, 2008 5:01 pm
Reply with quote

Modify Last sort card SRT3 to :
Code:

//SRT3CNTL DD *                                 
  OPTION COPY                                   
  INCLUDE COND=(8,10,ZD,EQ,+5)
  OUTREC FIELDS=(8,7)                     
/* 


--Parag
Back to top
View user's profile Send private message
shankar.v

Active User


Joined: 25 Jun 2007
Posts: 196
Location: Bangalore

PostPosted: Fri May 30, 2008 7:53 pm
Reply with quote

Hi Vijayakumar Mani,

Please check with the below code for your requirement.
Code:
// EXEC PGM=SYNCTOOL                 
//INFILE DD *                       
ROOT1  DATA1                         
CHILD1                               
CHILD2                               
CHILD3                               
ROOT2  DATA2                         
CHILD1                               
CHILD2                               
ROOT3  DATA3                         
CHILD1                               
CHILD2                               
CHILD3                               
CHILD4                               
CHILD5                               
ROOT4  DATA4                         
ROOT5  DATA5                         
ROOT6  DATA6                         
CHILD1                               
ROOT7  DATA7                                                           
/*                                                                     
//T DD DSN=&&T,DISP=(,PASS)                                             
//OUT DD SYSOUT=*                                                       
//DFSMSG DD SYSOUT=*                                                   
//TOOLMSG DD SYSOUT=*                                                   
//TOOLIN DD *                                                           
 COPY FROM(INFILE) TO(T) USING(CTL1)                                   
 SPLICE FROM(T) TO(OUT) ON(14,8,CH) WITH(6,8) USING(CTL2)               
/*                                                                     
//CTL1CNTL DD *                                                         
 INREC IFTHEN=(WHEN=INIT,OVERLAY=(81:SEQNUM,8,ZD)),                     
       IFTHEN=(WHEN=(1,4,CH,EQ,C'ROOT'),OVERLAY=(81:SEQNUM,8,ZD)),     
       IFTHEN=(WHEN=NONE,OVERLAY=(89:SEQNUM,8,ZD,                       
                                  81:81,8,ZD,SUB,89,8,ZD,M11,LENGTH=8))
 OUTFIL SECTIONS=(81,8,HEADER3=(8,5,14:81,8),                           
 TRAILER3=(6:COUNT-1=(M11,LENGTH=8),14:81,8)),                         
 REMOVECC,NODETAIL                                                     
/*                                         
//CTL2CNTL DD *                           
 OUTFIL INCLUDE=(6,8,ZD,EQ,+5),OUTREC=(1,5)
/*                                         
//

Output:
Code:
DATA3

Thanks,
Shankar
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> JCL & VSAM

 


Similar Topics
Topic Forum Replies
No new posts How to split large record length file... DFSORT/ICETOOL 10
No new posts To get the count of rows for every 1 ... DB2 3
No new posts SFTP Issue - destination file record ... All Other Mainframe Topics 2
No new posts FINDREP - Only first record from give... DFSORT/ICETOOL 3
No new posts Compare only first records of the fil... SYNCSORT 7
Search our Forums:

Back to Top