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