2014-05-09 41 views
1

對於ABAP程序,是否有與ROW_NUMBER()函數等效的函數?對於ROW_NUMBER()的打開SQL等效項

該功能用於在SQL如下:

SELECT ROW_NUMBER() OVER (ORDER BY SomeField) AS Row, * 
FROM SomeTable 

,它應該返回的行號作爲結果行的第一列(我不確定這是否是在結果的行號設置或源表中的行號)。我發現這個語句可以在SAP Business One中使用,但似乎無法找到與Open SQL等效的語句。

是否有一個或我會被迫手動循環所產生的itab來分配索引?

+0

只是出於好奇 - 你需要什麼?行號將(必須)是不穩定的,所以你想用它做什麼? – vwegert

+0

基本用例是在可以發送給XML或ALV的結構中的自己的列中提供行號。這個函數可以讓我可以用一個SELECT來填充整個結構,而不必將所選日期放在臨時itab中,循環遍歷itab並填充行號。 – Lilienthal

+0

而不是打開sql可以使用本機:http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb3b8b358411d1829f0000e829fbfe/content.htm – Jorg

回答

2

如果這是用於存儲記錄保留的行,以便以後在ABAP程序中訪問,則不需要存儲它。它在您循環時保持不變。就像是。

LOOP AT itab INTO wa_itab. 
write /:sy-tabix "This is the index of the record within the table 
ENDLOOP. 

如果要修改的內容,然後將它們存儲回表,爲你的價值添加一列,並完成類似: DATA:my_string類型字符串。

LOOP AT itab INTO wa_itab. 
my_string = sy-tabix. 
CONCATENATE some_text my_string more_text into wa_itab-my_field. 
MODIFY itab FROM wa_itab. "Here you can leave out INDEX sy-tabix because it is inside a loop and the current line will be used. 
CLEAR my_string. 
ENDLOOP.