2010-09-22 131 views
1

例如:使用表ITOB;如果我選擇EQUNR和ANLNR,則會得到多個條目(主要是由於非唯一的ILOAN,TPLNR和DATBI記錄)。我該怎麼做相當於:如何使用SAP Infoset查詢執行SELECT DISTINCT?

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

是否有一個複選框或單選按鈕的某處,我錯過了將只切換不同的條目?

OR

在代碼區的Unter演員我都可以給我什麼變數?如果我可以訪問結果集,我可以在那裏刪除重複項。我試圖訪問生成的程序中使用的%dtab,但沒有運氣。

+0

另外:一個程序員浪費時間來製作一個本應該不需要程序員工作的工具的諷刺,而所有程序員都可以在5分鐘內使用ABAP解決同樣的問題,這並不會讓我失去信心。 – Esti 2010-09-22 00:05:20

回答

2

在CODE領域,unter額外地提供了哪些變量可供我使用?

從我所看到的只有在連接條件中定義的選擇表的標題行在編碼塊中可用。 I.E.如果您從ITOB選擇加入ANLA,則兩個標題行 ITOB和ANLA都可用。 (這隻與RECORD PROCESSING塊有關)。但是,您可以在DATA塊中定義自己的變量。

如何訪問數據集&限制選擇後的記錄:

免責聲明:這感覺很像一個黑客,它並不適用於所有的輸出類型的工作,但它確實表明你如何訪問數據集。

在代碼塊初始化添加以下語句:

* 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的問題...