GROUP BY CLAUSE使用SYNCSORT

时间:2014-12-29 19:00:16

标签: group-by mainframe syncsort

我在文件中有一些内容,我必须在其中生成统计信息,例如记录的类型有多少 - 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值

1 个答案:

答案 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代表空白)?这需要更多代码......