ABAP之opensql 的case..when用法

举报
百里丶落云 发表于 2023/08/30 10:41:38 2023/08/30
【摘要】 序HELLO,这里是百里,一个学习中的ABAPER,在工作学习中,肯定会遇到这么一种业务需求,就是当我某个表的某个值没有值时,我去取另外一个表的对应的值. 一般在自开发表,配合标准表的应用中特别多.在ALV展示时,往往需要配合多家进行统一写代码,这时又需要详细区分条件,从而按照不同公司展示应数据内容. 如果你取数内容涉及十分简单.那么就可以使用今天所讲述的功能,CASE…WEHN. 什么是...

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 THEN1 

               WHEN 条件2 THEN2

               ELSE3
                    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 用法

image.png

循环+ read读写入用法

image.png

可见结果是一样的,但是代码最少少写了几十行 ,当然我这还是简单的案例,当然仅仅起的是抛砖引玉的作用.

技术总结

今天讲述的是HANA中的新语法,CASE…WHEN的详细使用方式,及案例对比,学会了这种使用用法,在面对简单逻辑是,我们可以减少非常的是代码编写,从而提高效率 .

百里鸡汤

青春须早为,岂能长少年。——孟郊《劝学》

这里是百里,一个努力的学习者. 努力学习好好记录,点滴进步,就是成功.

wallhaven-m3dqj8.jpg

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。