Syncsort Sum Fields=None 不删除重复项
Posted
技术标签:
【中文标题】Syncsort Sum Fields=None 不删除重复项【英文标题】:Syncsort Sum Fields=None not removing duplicates 【发布时间】:2016-08-08 21:19:27 【问题描述】:我正在尝试运行将删除重复条目的 SYNCSORT 作业,但当我运行它时,我仍然会收到重复项。以下是我正在使用的 SYNCSORT 代码:
INCLUDE COND=(((61,1,CH,EQ,C'P'),OR,
(61,1,CH,EQ,C'V')),AND,
(8,2,CH,EQ,C'FL'))
OUTREC FIELDS=(1:12,20,
30:36,20,
55:61,1)
SORT FIELDS=(30,20,CH,A,
01,20,CH,A)
SUM FIELDS=NONE
输入如下:
----+----1----+----2----+----3----+----4----+----5----+----6
FL AMELIA CITY
32034 FL NASSAU FERNANDINA BEACH P
32034 FL NASSAU AMELIA CITY V
32034 FL NASSAU AMELIA ISLAND S
32034 FL NASSAU FERNANDINA S
我得到了大部分预期的输出,除了我仍然得到重复。我的输出如下:
----+----1----+----2----+----3----+----4----+----5----+
MANATEE BRADENTON P
MANATEE BRADENTON P
MANATEE BRADENTON P
MANATEE BRADENTON P
MANATEE BRADENTON P
MANATEE BRADINGTON V
POLK BRADLEY P
HILLSBOROUGH BRANDON P
SUWANNEE BRANFORD P
MIAMI-DADE BRICKELL V
任何帮助将不胜感激,因为我无法找到我的错误。
【问题讨论】:
首先,排序适用于输入记录,您可以在其中对输出记录的排序进行编码。 【参考方案1】:这就是你的排序总结:
< ------------ Sort Field ----------------------->
----+----1----+----2----+----3----+----4----+----5----+----6
FL AMELIA CITY
32034 FL NASSAU FERNANDINA BEACH P
32034 FL NASSAU AMELIA CITY V
32034 FL NASSAU AMELIA ISLAND S
32034 FL NASSAU FERNANDINA S
重复记录在前 11 个字节中会有所不同,您看不到。尝试删除outrec进行检查。
可能的变化 -
将 outrec 更改为 inrec 使用与输出关联的字段重新编码排序,请参阅以下内容:以下排序根据输出记录排序:
INCLUDE COND=(((61,1,CH,EQ,C'P'),OR,
(61,1,CH,EQ,C'V')),AND,
(8,2,CH,EQ,C'FL'))
OUTREC FIELDS=(1:12,20,
30:36,20,
55:61,1)
SORT FIELDS=(42,20,CH,A,
12,20,CH,A)
SUM FIELDS=NONE
【讨论】:
我最终将 outrec 更改为 inrec,然后更改了排序。【参考方案2】:“排序”的不同阶段的编码顺序无关紧要,它们将按照 SORT 想要的顺序执行。
在您的情况下,这将是 INCLUDE
,然后是 SORT
,然后是 SUM
,然后是 OUTREC
。您可以通过完全反转控制卡来检查是否是这种情况,您将获得相同的输出。
如果您想在 SORT 之前做某事,请使用 INREC
,而不仅仅是尝试在 SORT 语句之前定位 OUTREC。在这里,由于您正在排序,因此您只想包含您需要的数据。您不想要包含用于格式化的间距。为什么要将文件加载到 SORT 并在每条记录上使用额外的相同数据?
在 INREC 和 OUTREC 上,请不要使用 FIELDS
。在OUTFIL
请不要使用OUTREC
。很明显 FIELDS 是“超载”的(看看你使用 FIELDS 的次数,看看有多少次是“相同的”),而 OUTREC 是“超载”的。 10 多年前,BUILD
被引入让事情变得更加清晰 - 它描述了它正在做什么,每次你看到 BUILD 时它只意味着 BUILD。
INCLUDE COND=(((61,1,CH,EQ,C'P'),
OR,
(61,1,CH,EQ,C'V')),
AND,
(8,2,CH,EQ,C'FL'))
INREC BUILD=(36,20,
12,20,
61,1)
SORT FIELDS=(1,40,CH,A)
OUTREC BUILD=(21,10,
10X,
1,20,
5X,
41,1)
INREC 仅选择您想要的数据,并按照您需要的顺序仅指定一个 SORT 键。
然后,OUTREC 会按照您想要的方式格式化数据。对于 SORT 中的每条记录,保存了 15 个字节(空白)。 10X
是 10 个空格,5X 是 5 个空格。
请注意,如果您包含“显式”空格而不是使用列号的隐式空格,则编码和理解会更容易,因此更易于维护。对报告的 10 列进行成像,并且第一列和第二列之间的间距不正确。您想更改所有列引用,只是为了增加一个额外的空间,还是更愿意将 7X 更改为 8X,其余的自行解决?即使您喜欢乏味的变化,也要记住您的同事:-)
如果您的数据已经有序不要使用 SUM FIELDS=NONE。使用 OUTFIL 报告功能,REMOVECC
、NODETAIL
和 SECTIONS
和 TRAILER3
。 永远不要 对数据进行排序只是为了让您删除带有SUM FIELDS=NONE
的重复数据。
【讨论】:
以上是关于Syncsort Sum Fields=None 不删除重复项的主要内容,如果未能解决你的问题,请参考以下文章