如何使用DFSORT合并具有相同ID的条目?
用DFSORT实现同ID下属性值的合并
可以用DFSORT完成这个合并需求,以下是具体的实现方案:
完整JCL示例
//MERGEID JOB (ACCT),'MERGE ID ATTRIBUTES',CLASS=A,MSGCLASS=X //SORT EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD DSN=你的输入数据集名称,DISP=SHR //SORTOUT DD DSN=你的输出数据集名称,DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(1,1),RLSE),RECFM=FB,LRECL=80 //SYSIN DD * SORT FIELDS=(1,4,CH,A) OUTFIL REMOVECC, HEADER1=(1:'ID Particularity',/,1:'---- ----------------'), IFTHEN=(WHEN=GROUP, BEGIN=(1,4,NE,1,4,OR,INRECORD=1), PUSH=(10:1,4, 15:15,3), END=(1,4,NE,NEXT(1,4)), BUILD=(1,4,8X, 15,3, ', ',NEXT(15,3), ', ',NEXT(NEXT(15,3)), ', ',NEXT(NEXT(NEXT(15,3))))), IFTHEN=(WHEN=(1,4,EQ,PREV(1,4)),DROP) /*
关键逻辑说明
- 排序分组:
SORT FIELDS=(1,4,CH,A)按第1-4位的ID字段升序排序,确保相同ID的记录连续排列(即使输入数据已有序,这一步也能避免异常情况)。 - 表头输出:
HEADER1参数指定输出要求的表头行。 - 分组合并:
WHEN=GROUP定义分组规则:BEGIN标记分组起始(当前ID与上一条不同,或是第一条记录),END标记分组结束(当前ID与下一条不同)。PUSH将当前记录的ID和Particularity值推送到临时字段,用于后续拼接。BUILD把同组内的多个Particularity值用「逗号+空格」拼接成连续字符串。
- 去重保留结果:最后一条
IFTHEN规则删除重复的ID记录,只保留每组的合并结果行。
注意事项
- 需要根据实际输入文件的记录格式(FB/VB)和字段位置,调整
1,4(ID的起始位置和长度)、15,3(Particularity的起始位置和长度)的参数。 - 如果同一个ID对应的Particularity数量超过4个,只需在
BUILD语句中继续添加, ', NEXT(NEXT(...))的格式扩展即可。
内容的提问来源于stack exchange,提问作者aloisio_am
相关产品推荐
相关产品推荐

