ABAP之opensql 的case..when用法
序
HELLO,这里是百里,一个学习中的ABAPER,在工作学习中,肯定会遇到这么一种业务需求,就是当我某个表的某个值没有值时,我去取另外一个表的对应的值. 一般在自开发表,配合标准表的应用中特别多.在ALV展示时,往往需要配合多家进行统一写代码,这时又需要详细区分条件,从而按照不同公司展示应数据内容. 如果你取数内容涉及十分简单.那么就可以使用今天所讲述的功能,CASE…WEHN.
什么是CASE…WEHN
在前台sql中 比如orcle, sql server ,mysql 等, 都有类似的用法, 就是当我输入某个值 属于某个条件时,那么就等于什么值.
在SAP中,以前的ECC6版本之前的内容是不支持这种用法de, 你就只能取出关联字段,在通过loop 循环结合IF判断的情况进行赋值修改. 在HANA版本中新增加了 CASE…WHEN 的用法.大大的减少了工作中的代码量.
技术解析
在opensql 中,我们通过sql 语句,进行查询数据时,插入对应的case…when 用法.
CASE WHEN 条件1 THEN 值1
WHEN 条件2 THEN 值2
ELSE 值3
end as 字段名
基本上与SQL中的用法毫无差别,就是简单的逻辑学判断 .
实例与对比
本案例将会进行对比两种操作方式,都是当符合某个条件时获取数据的内容.
数据准备
TYPES : BEGIN OF ty_Data ,
DOCCODE TYPE char20 ,
ZROWID TYPE char20 ,
MATCODE TYPE char20 ,
" MATNAME TYPE char20 ,
" UOM TYPE char20 ,
" MEMO TYPE char20 ,
message TYPE char20 ,
END OF ty_Data .
data : gs_Data TYPE ty_Data .
data : gt_data TYPE TABLE of ty_Data .
data : gt_data1 TYPE TABLE of ty_Data .
INITIALIZATION .
at SELECTION-SCREEN .
at SELECTION-SCREEN OUTPUT .
case…when 用法
*&---------------------------------------------------------------------*
*& Form get_Data
*&---------------------------------------------------------------------*
*& text case----when 的方式赋值
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_Data .
select DOCCODE ,ZROWID ,MATCODE ,
CASE
when UOM = '双'
THEN MATNAME
when UOM = 'P'
THEN MEMO
END AS MESSAGE FROM ZWDEMOTABLE1 AS A INTO TABLE @gt_datA .
ENDFORM.
循环+ read读写入用法
*&---------------------------------------------------------------------*
*& Form get_Data1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_Data1 .
select DOCCODE ,ZROWID ,MATCODE , MATNAME,UOM,MEMO from ZWDEMOTABLE1 as a INTO table @data(lt_data) .
MOVE-CORRESPONDING lt_data to gt_data1.
LOOP AT lt_data into data(ls_data).
MOVE-CORRESPONDING ls_data to gs_data .
IF ls_data-uom = '双'.
Gs_data-message = ls_data-matname .
ELSEIF ls_data-uom = 'P'.
Gs_data-message = ls_data-UOM .
ENDIF.
MODIFY gt_data1 FROM gs_Data TRANSPORTING message WHERE DOCCODE = ls_data-DOCCODE AND ZROWID = ls_data-ZROWID .
clear gs_Data .
CLEAR ls_data .
ENDLOOP.
READ TABLE gt_data1 into gs_Data INDEX 1 .
ENDFORM.
调用程序
START-OF-SELECTION .
PERFORM get_Data .
PERFORM get_Data1 .
end-of-SELECTION .
结果
case … when 用法
循环+ read读写入用法
可见结果是一样的,但是代码最少少写了几十行 ,当然我这还是简单的案例,当然仅仅起的是抛砖引玉的作用.
技术总结
今天讲述的是HANA中的新语法,CASE…WHEN的详细使用方式,及案例对比,学会了这种使用用法,在面对简单逻辑是,我们可以减少非常的是代码编写,从而提高效率 .
百里鸡汤
青春须早为,岂能长少年。——孟郊《劝学》
这里是百里,一个努力的学习者. 努力学习好好记录,点滴进步,就是成功.
- 点赞
- 收藏
- 关注作者
评论(0)