1

例如:使用表 ITOB;如果我选择 EQUNR 和 ANLNR,我会得到多个条目(主要是由于非唯一的 ILOAN、TPLNR 和 DATBI 记录)。我该怎么做相当于:

select distinct equnr anlnr from itob into (itob-equnr, itob-anlnr)
  where (some_wherclause).

我是否缺少某个复选框或单选按钮,它们只会切换不同的条目?

或者

在 CODE 区域中,我可以使用哪些变量?如果我可以访问结果集,我可以删除那里的重复项。我曾尝试访问生成程序中使用的 %dtab,但没有运气。

4

1 回答 1

2

在 CODE 区域中,我可以使用哪些变量?

据我所知,只有您在连接条件中定义的选择表的标题行在编码块中可用。IE 如果您从 ITOB 中选择加入 ANLA,则标题行ITOB 和 ANLA 都可用。(这仅在记录处理块中相关)。但是,您可以在 DATA 块中定义自己的变量。

选择后如何访问数据集和限制记录:

免责声明:这感觉非常像 hack,它不适用于所有输出类型,但它确实显示了您如何访问数据集。

在代码块 INITIALIZATION 中添加以下语句:

* Dummy comment to force generation 
* of END-OF-SELECTION Block

任何注释都可以——所有这些都是强制程序生成器生成我们需要访问数据集的 END-OF-SELECTION 块。

在代码块 END-OF-SELECTION 中添加以下内容:

data: lv_table type char100 value '%G00[]'.
field-symbols: <table> type any table.
assign (lv_table) to <table>.
if <table> is assigned.
  sort <table>.
  delete adjacent duplicates from <table>.
endif.

%G00 是生成程序中结果集的变量名(使用 [] 访问表格,而不仅仅是标题行)。由于生成的程序变量在 Infoset 中不可用,因此您必须使用字段符号来访问任何变量。如果变量不存在,分配检查将避免任何运行时错误。

限制: 在“ABAP 列表模式”下执行查询时,此代码不起作用,这是因为在这种情况下,列表是在选择数据时写入的,因此任何事后的操作都为时已晚。

我最终做了什么:

我在 ITOB (EQUI->EQUZ->ILOA) 中手动连接了相关的单个表,并将 IFLOT 和 IFLOTX 排除在外,这只需要我对结束日期施加额外的限制。我想在大多数情况下,可以通过使用正确的 WHERE 子句将数据解构到可以避免重复的水平。当您真正需要保持开放状态时如何执行 SELECT DISTINCT 的问题......

于 2010-09-23T00:12:40.397 回答