下一条记录的测试数据

Posted

技术标签:

【中文标题】下一条记录的测试数据【英文标题】:Test data on next record 【发布时间】:2015-09-01 15:43:53 【问题描述】:

我想知道当我们使用 SyncSORT (SyncTool) 基于特定条件时是否可以读取下一条记录。

输入示例

排序键为账户编号+降序记录类型+金额

account nbr  amount  record type
11111111111   10      reversal    not in the output
11111111111   10      deposit     not in the output
33333333333   20      deposit     in the output
44444444444   15      deposit     in the output
55555555555   20      reversal    in the output
55555555555   10      deposit     in the output
66666666666   30      reversal    in the output no match

当一个冲销类型被读取时,存款应该跟随相同的金额,在这种情况下它既记录冲销并且存款不应该在输出文件中。冲销和存款的金额可能不同,在这种情况下,两个记录都应该在输出文件中。

输出

33333333333   20      deposit
44444444444   15      deposit
55555555555   20      reversal   
55555555555   10      deposit     
66666666666   30      reversal     

【问题讨论】:

【参考方案1】:

是的。只要您的 SyncSORT 是最新的。

您需要使用 JOINKEYS。为两个输入数据集指定相同的 DSN,并指示它们已排序。有一个未记录的功能允许使用 JNFnCTNL 文件,例如 DFSORT。

在 JNF1CNTL(它是第一个 JOINKEYS 数据集的“预处理器”)中临时为每条记录添加一个序列号。默认值是序列从 1 开始。在这里,明确一点很有用...

因为,在 JNF2CNTL 中,您想要做同样的事情,但从零开始序列 (START=0)。

每个 JOINKEYS 的键是序列号。

使用 JOIN UNPAIRED,F1。使用第一个文件中的所有数据和第二个文件中的比较数据定义一个 REFORMAT。

如果您想象连接,这就是四记录数据集的样子:

- - A 0
A 1 B 1
B 2 C 2
C 3 D 3
D 3 - - 

因为您指定了 JOIN UNPAIRED,F1,您实际上不会看到不匹配的 A 0(因为它在 F2 上),但您会看到不匹配的 D 3。

如果您查看您的 REFORMAT 记录,您现在有来自“当前”记录的数据和来自“下一个”记录的数据。

然后需要做更多的工作来仅选择您想要的记录。不过,先吃饭吧……

【讨论】:

嗨,比尔,感谢您的回答。您在(ibm icetool 文档或同步排序)中的某处有这方面的任何示例吗?不用在 COBOL 中编写代码真是太好了!!!

以上是关于下一条记录的测试数据的主要内容,如果未能解决你的问题,请参考以下文章

oracle记录中选择出第一条记录

如何获取SQL查询当前数据上一条和下一条的记录?

使用下一条记录的数据更新 SQL Server 单元格数据

关于查询sql中数据上一条记录和下一条记录的sql语句......

Mysql 查询当前数据上一条和下一条的记录

如果数据库中已经存在值,则R跳到下一条记录