我在文件中有一些内容,我必须在其中生成统计信息,例如记录的类型有多少 - 1,类型 - 2等。类型的数量可以更改,并且在文件到达之前代码是未知的。在SQL系统中,我可以使用COUNT和GROUP BY子句来完成此操作。但我不确定我是否可以使用SYNCSORT或COBOL程序执行此操作。这里的任何人都可以了解如何使用SYNCSORT在文件上实现“GROUP BY”类型查询。
示例数据:
TYPE001 SUBTYPE001 TYPE01-DESC
TYPE001 SUBTYPE002 TYPE01-DESC
TYPE001 SUBTYPE003 TYPE01-DESC
TYPE002 SUBTYPE001 TYPE02-DESC
TYPE002 SUBTYPE004 TYPE02-DESC
TYPE002 SUBTYPE008 TYPE02-DESC
我想获取TYPE001 ==>等信息。 3记录,TYPE002 ==> 3记录。代码在运行时之前不知道的是TYPENNN值
答案 0 :(得分:3)
您已按顺序显示数据,因此无需对数据本身进行排序,如果有人建议,SUM FIELDS=
SORT
MERGE
是一个糟糕的解决方案(加上格式代码)。< / p>
带有单个输入文件的
OUTFIL
和SUM FIELDS =会更好,但仍然需要格式化代码。
生成可能适合您的输出的最简单方法是使用 OPTION COPY
OUTFIL NODETAIL,
REMOVECC,
SECTIONS=(1,7,
TRAILER3=(1,7,
' ==> ',
COUNT=(M10,LENGTH=3),
' Records'))
报告功能:
NODETAIL
REMOVECC
表示“删除所有数据行”。 SECTIONS
表示“虽然它是一个报告,但不要在输出记录的位置之一上使用打印机控制字符”。 TRAILER3
说“我们将使用控制中断,在这里它们(在这种情况下)是”。在这种情况下,您的控制字段为1,7。 COUNT
定义了在每个控制中断时将生成的输出:M10
这里是该特定中断中的记录数。 LENGTH
是一个编辑掩码,它会将前导零更改为空白。 {{1}}给出COUNT输出的长度,从样本数据中选择三个,子类型是唯一的,并且有三个数字作为数据的唯一部分。更改为适合您实际数据的内容。
您还不清楚,也许您希望输出“浮动”(3bb而不是bb3,其中b代表空白)?这需要更多代码......