首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DFSORT仅查找第一个重复项时选择重复项

DFSORT仅查找第一个重复项时选择重复项
EN

Stack Overflow用户
提问于 2012-02-11 01:53:55
回答 1查看 10.6K关注 0票数 0

下面的JCL应该选择每条记录的第一个副本,保持它们的顺序不变,因为有"OPTION COPY“,并且只在字节4长度为7和‘’时使用'NETWORK‘。字节59长度为1,不包括字节3长度为5的'TOTAL‘和字节3长度为5的'GRAND’记录。

它显示字节4长度为7的所有带有'NETWORK‘的记录

代码语言:javascript
复制
//SORT EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DISP=SHR,DSN=INPUT.FILE
//T1       DD DSN=&&T1,DISP=(MOD,PASS),SPACE=(TRK,(5,5))
//OUT DD SYSOUT=*
//OUTFIL DD SYSOUT=*
//TOOLIN   DD *
* DROP EVERYTHING WE DON'T WANT
  SELECT FROM(IN)  TO(OUT) ON(1,134,CH) USING(CTL1) FIRST
/*
//CTL1CNTL DD *
  OPTION COPY
  INCLUDE COND=((4,7,CH,EQ,C'NETWORK',OR,
                 59,1,CH,EQ,C'.'),AND,
                 (3,5,CH,NE,C'TOTAL',AND,
                  3,5,CH,NE,C'GRAND'))
/*

如果我改变它的条件,只在字节4长度为7的'NETWORK‘,它只显示1条记录,这是我所期望的。每次输入都是相同的。

代码语言:javascript
复制
//CTL1CNTL DD *
  OPTION COPY
  INCLUDE COND=((4,7,CH,EQ,C'NETWORK'))
/*

我找不出是什么不同导致其他条件改变它,所以它有重复的

其中2条评论表明问题出在包含条件上。

我尝试了下面的方法,第一个select执行的是我原来执行的操作,第二个select没有包含条件,因为它们已经在第一个SELECT中发生了。仍然存在网络长度为4字节为7的重复记录。其余记录与网络完全相同,因此应该只有1条。

代码语言:javascript
复制
//TOOLIN   DD *
* DROP EVERYTHING WE DON'T WANT
  SELECT FROM(IN)  TO(T1) ON(1,133,CH) USING(CTL1) FIRST
  SELECT FROM(T1)  TO(OUT) ON(1,133,CH) USING(CTL2) FIRST
/*
//CTL1CNTL DD *
  OPTION COPY
    INCLUDE COND=((4,7,CH,EQ,C'NETWORK',OR,
                   59,1,CH,EQ,C'.'),AND,
                   (3,5,CH,NE,C'TOTAL',AND,
                    3,5,CH,NE,C'GRAND'))
/*
//CTL2CNTL DD *
  OPTION COPY
/*
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-13 22:56:37

SELECT FIRST操作符期望对输入进行排序,一旦您没有指定"OPTION COPY“,它就会在检查重复项之前对输入进行排序。

我想要删除重复项并保持其输入顺序。

下面的方法是添加一个序列号,允许将临时文件重新排序为输入顺序

代码语言:javascript
复制
//TOOLIN   DD *
* SELECT REMOVING THE DUPLICATES AND ONLY INCLUDING THE FIELDS WANTED
* TO TEMP DD T1
  SELECT FROM(IN)  TO(T1) ON(1,133,CH) USING(CTL1) FIRST
* COPY FROM TEMP DD T1 TO DD OUT USING CTL2 STATEMENTS
  COPY FROM(T1) TO(OUT) USING(CTL2)
/*
//CTL1CNTL DD *
  INCLUDE COND=((4,7,CH,EQ,C'NETWORK',OR,
                 59,1,CH,EQ,C'.'),AND,
                 (3,5,CH,NE,C'TOTAL',AND,
                  3,5,CH,NE,C'GRAND'))
* ADD SEQUENCE NUMBER 8 NUMBERS LONG TYPE SIGNED ZONED DECIMAL AT THE
* END OF EACH RECORD
  INREC OVERLAY=(134:SEQNUM,8,ZD)
/*
//CTL2CNTL DD *
* SORT ON THE SEQUENCE NUMBER WHICH PUTS THE RECORDS BACK IN INPUT
* ORDER
  SORT FIELDS=(134,8,CH,A)
/*
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9232421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档