如何使用SAP Infoset查询执行SELECT DISTINCT?

时间:2010-09-22 00:03:30

标签: sap

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

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

我缺少哪个复选框或单选按钮,只会切换不同的条目?

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

1 个答案:

答案 0 :(得分:2)

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

从我所看到的,只有在连接条件中定义的选择表的标题行在编码块中可用。 I.E.如果您从ITOB加入ANLA中选择,则可以使用标题行 ITOB和ANLA。 (这仅与RECORD PROCESSING块有关)。但是,您可以在DATA块中定义自己的变量。

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

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

在代码块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-&gt; EQUZ-&gt; ILOA)中手动加入了相关的单个表格,并将IFLOT和IFLOTX从混合中删除,这只要求我对结束日期施加额外的限制。我想在大多数情况下,可以通过使用正确的WHERE子句将数据解构为可以避免重复的级别。当你真正需要保持开放时,如何进行SELECT DISTINCT的问题...