View previous topic :: View next topic
|
Author |
Message |
Vijayakumar Mani
New User
Joined: 24 Oct 2007 Posts: 11 Location: Salem
|
|
|
|
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 |
|
|
ParagChouguley
Active User
Joined: 03 Feb 2007 Posts: 175 Location: PUNE(INDIA)
|
|
|
|
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 |
|
|
Vijayakumar Mani
New User
Joined: 24 Oct 2007 Posts: 11 Location: Salem
|
|
|
|
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 |
|
|
ParagChouguley
Active User
Joined: 03 Feb 2007 Posts: 175 Location: PUNE(INDIA)
|
|
|
|
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 |
|
|
shankar.v
Active User
Joined: 25 Jun 2007 Posts: 196 Location: Bangalore
|
|
|
|
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:
Thanks,
Shankar |
|
Back to top |
|
|
|
|