通过OUTFIT错误计算文件的两个字段之间的组合

时间:2013-11-07 16:19:18

标签: jcl syncsort

我需要包括这个条件:

 1) Total no.of records per combination of field1 and field3 (INCLUDE=(1,2,8,3,CH,A)

输入文件:如果您在下面的示例中看到,则FIELD1和FIELD3有5种组合

 field1 field2 field3 field4
 AA     00000  123    ABC
 AA     00000  123    ABC
 AA     00000  456    ABC
 BB     00000  123    ABC
 BB     00000  123    ABC
 BB     00000  789    ABC
 AA     00000  567    ABC

输出文件:获得5行,每个组合一个,为它提供no.of

 FIELD1 FIELD3  COUNT-OF-COMBINATION
 AA     123     2
 AA     456     1
 AA     567     1
 BB     123     2
 AA     789     1

My method is:
 //SYSIN    DD  *                                                       
   SORT FIELDS=COPY                                                     
   OPTION COPY                                                          
   OUTFIL REMOVECC,NODETAIL,                                            
   TRAILER1=(1,2,'ON',8,3,'=',COUNT=(M11,LENGTH=10)))

/ *

我得到的答案是:

           AA ON 123 = 7

哪个错了: 它应该是

  AA  ON   123   =  2
  AA  ON   456   =  1
  AA  ON   567   =  1
  BB  ON   123   =  2
  AA  ON   789   =  1

1 个答案:

答案 0 :(得分:1)

你有:

 SORT FIELDS=COPY                                                     
 OPTION COPY                                                          
 OUTFIL REMOVECC,NODETAIL,                                            
 TRAILER1=(1,2,'ON',8,3,'=',COUNT=(M11,LENGTH=10)))

第一个问题是你有SORT FIELDS=COPYOPTION COPY。这些意味着同样的事情。删除其中一个(我倾向于使用OPTION COPY)。

接下来,你有一个备用右括号。

然后你正在使用TRAILER1。 TRAILERn有三种类型:1是“在报告的末尾”; 2是在页面的末尾; 3是控制中断。

您使用TRAILER1,因此在文件末尾您会收到一条包含文件总数的记录。

之后,TRAILER1的位置与输出匹配,而不是输入文件。

这让我们知道您没有使用该数据运行那些排序控制卡。控制卡有语法错误,这意味着它们不运行。更正卡并保留TRAILER1将获得AAON567=0000000007

这将我们带到控制中断,这是你缺少的。

使用SECTIONS定义控制中断。 TRAILER3是SECTIONS的一部分。

修复输出格式以外的所有内容:

 OPTION COPY 
 OUTFIL REMOVECC,NODETAIL, 
        SECTIONS=(1,2,
                  15,3, 
                  TRAILER3=(1,2,
                            'ON',
                             15,3,
                             '=',
                             COUNT=(M11,
                                    LENGTH=10))) 

这给了你:

 AAON123=0000000002
 AAON456=0000000001
 BBON123=0000000002
 BBON789=0000000001
 AAON567=0000000001

如果您想要列标题,请查看如何使用HEADER3(HEADER1和HEADER2也适用于这种简单的情况)。如果你想要“页面总数”,请查看TRAILER2。如果您想要文件总数,请使用TRAILER1。