ABAP COLLECT语句用法深入解析
生活随笔
收集整理的這篇文章主要介紹了
ABAP COLLECT语句用法深入解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們都知道collect語句,主要用于
報表
數據的合并計算的,簡單理解是:如果非數據字段值相等,那么數值字段值相加,其實這種描述不準確。
COLLECT 簡單的用法:
LOOP??AT??t_data.
??COLLECT??t_data INTO??t_test.?
ENDLOOP . 復制代碼
其中 t_data和t_test結構相同,那么有以下疑問:
1、問題一:
*----------------------------------------------------------------------*
*? ?define internal tables or workarea
*? ?定義內表或者工作區
*----------------------------------------------------------------------*
DATA : BEGIN??OF??w_test,
key??TYPE??string,? ?? ???"這是關鍵字段,用于根據這列來統計的V1、V2的值(這個關鍵字段可以是多個)
v1??TYPE??i ,
v2??TYPE??i ,
END? ? OF??w_test.
DATA : t_data LIKE??w_test OCCURS??0??WITH??HEADER??LINE .? ?? ? "定義數據內表
DATA : t_data_1 LIKE??w_test OCCURS??0??WITH??HEADER??LINE .
DATA : t_test LIKE??w_test OCCURS??0??WITH??HEADER??LINE .
*----------------------------------------------------------------------*
*? ?assign value to internal tables
*? ?給內表賦值用于測試
*----------------------------------------------------------------------*
DO??8??TIMES .
??IF??sy-index??< 3 .
? ? t_data-key??= 'A' .
? ? t_data-v1??= sy-index .
? ? t_data-v2??= sy-index??+ 1 .
??ELSEIF??sy-index??< 6 .
? ? t_data-key??= 'B' .
? ? t_data-v1??= sy-index .
? ? t_data-v2??= sy-index??- 1 .
??ELSE .
? ? t_data-key??= 'C' .
? ? t_data-v1??= sy-index??- 1 .
? ? t_data-v2??= sy-index??- 2 .
??ENDIF .
??APPEND??t_data.
ENDDO .
t_data_1[] = t_data[].
DO??2??TIMES .
??APPEND LINES OF t_data_1 TO t_data.
ENDDO .
*----------------------------------------------------------------------*
*? ?process interal table
*? ?處理內表(統計)
*----------------------------------------------------------------------*
LOOP??AT??t_data.
??COLLECT??t_data INTO??t_test.? ?? ?? ?"按關鍵列統計值
ENDLOOP .
*----------------------------------------------------------------------*
*??output internal tables
*??打印輸出內表
*----------------------------------------------------------------------*
WRITE : sy-uline .
WRITE : '內表數據:' .
LOOP??AT??t_data.
??WRITE : / ' ' ,t_data-key ,t_data-v1, t_data-v2.
ENDLOOP .
WRITE : sy-uline .
WRITE : sy-uline .
WRITE : 'collect后的數據:' .
LOOP??AT??t_test.
??WRITE : / ' ' ,t_test-key , t_test-v1, t_test-v2.
ENDLOOP .
WRITE : sy-uline . 復制代碼 測試結果:
結論:COLLECT實際運用中loop的內表不需要排序,直接loop累加計算。
2、問題二:
以collect代碼稍加改變:
LOOP??AT??t_data.
??IF t_data-v1 = 2 OR t_data-v1 = 4 OR t_data-v1 = 5.
? ? COLLECT??t_data INTO??t_test.? ?? ?? ?"按關鍵列統計值
??ELSE.
? ? DELETE t_data.
??ENDIF.
ENDLOOP . 復制代碼 測試結果:
?
結論:COllECT語句支持這種在loop語句中篩選數據再計算。
由此可見,COLLECT語句還是很強大的,項目中經常會有這種篩選數據在計算,不需要再額外復制內表計算了
你在實際項目中可能使用collect是遇到下面問題:
'You can only use the collect command in a table if all of its non-keyfields are numeric(type I,P or F) 復制代碼
只有在 COLLECT 命令的所有非關鍵字段均為數字(類型 I、P 或F)時才可在表中使用該命令。numeric (type I, P, or F)
使用collect就要求所有的非key fields均是I,P或者F數據類型,另外要注意的是對于standard table 而言,如果不指定key fields那么它的key fields就那些非I, P,F數據類型的fields,sorted table 和 hash table均必須指定key fields。
注意:貨幣類型CURR實際類型是P,所以也可以使用collect累加
COLLECT 簡單的用法:
其中 t_data和t_test結構相同,那么有以下疑問:
- COLLECT實際運用中loop的內表(t_data)需要排序么?
- loop語句中能不能用if或者delete語句,篩選部分數據,然后collect計算呢
1、問題一:
結論:COLLECT實際運用中loop的內表不需要排序,直接loop累加計算。
2、問題二:
以collect代碼稍加改變:
?
結論:COllECT語句支持這種在loop語句中篩選數據再計算。
由此可見,COLLECT語句還是很強大的,項目中經常會有這種篩選數據在計算,不需要再額外復制內表計算了
你在實際項目中可能使用collect是遇到下面問題:
只有在 COLLECT 命令的所有非關鍵字段均為數字(類型 I、P 或F)時才可在表中使用該命令。numeric (type I, P, or F)
使用collect就要求所有的非key fields均是I,P或者F數據類型,另外要注意的是對于standard table 而言,如果不指定key fields那么它的key fields就那些非I, P,F數據類型的fields,sorted table 和 hash table均必須指定key fields。
注意:貨幣類型CURR實際類型是P,所以也可以使用collect累加
總結
以上是生活随笔為你收集整理的ABAP COLLECT语句用法深入解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】手工导入传输请求(Transpor
- 下一篇: 【推荐】ABAP select语句性能优