前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ABAP之opensql 的case..when用法

ABAP之opensql 的case..when用法

作者头像
百里丶落云
发布2022-12-25 10:54:02
1.1K0
发布2022-12-25 10:54:02
举报
文章被收录于专栏:享~方法

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情

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

什么是CASE...WEHN

在前台sql中 比如orcle, sql server ,mysql 等, 都有类似的用法, 就是当我输入某个值 属于某个条件时,那么就等于什么值.

在SAP中,以前的ECC6版本之前的内容是不支持这种用法de, 你就只能取出关联字段,在通过loop 循环结合IF判断的情况进行赋值修改. 在HANA版本中新增加了 CASE...WHEN 的用法.大大的减少了工作中的代码量.

技术解析

在opensql 中,我们通过sql 语句,进行查询数据时,插入对应的case..when 用法.

代码语言:javascript
复制
CASE WHEN 条件1 THEN 值1 

               WHEN 条件2 THEN 值2

               ELSE 值3
                    end as 字段名

基本上与SQL中的用法毫无差别,就是简单的逻辑学判断 .

实例与对比

本案例将会进行对比两种操作方式,都是当符合某个条件时获取数据的内容.

数据准备

代码语言:javascript
复制
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 用法

代码语言:javascript
复制
*&---------------------------------------------------------------------*  
*& Form get_Data  
*&---------------------------------------------------------------------*  
*& text  case----when 的方式赋值  
  
*&---------------------------------------------------------------------*  
*& -->  p1        text  
*&amp; <--  p2        text  
*&amp;---------------------------------------------------------------------*  
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读写入用法

代码语言:javascript
复制
*&amp;---------------------------------------------------------------------*
*&amp; Form get_Data1
*&amp;---------------------------------------------------------------------*
*&amp; text
*&amp;---------------------------------------------------------------------*
*&amp; -->  p1        text
*&amp; <--  p2        text
*&amp;---------------------------------------------------------------------*
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.

调用程序

代码语言:javascript
复制
START-OF-SELECTION .  
PERFORM get_Data .  
PERFORM get_Data1 .  
  
end-of-SELECTION .

结果

case ... when 用法

image.png
image.png

循环+ read读写入用法

image.png
image.png

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

技术总结

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

百里鸡汤

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

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

wallhaven-m3dqj8.jpg
wallhaven-m3dqj8.jpg
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是CASE...WEHN
  • 技术解析
  • 实例与对比
    • 数据准备
      • case...when 用法
        • 循环+ read读写入用法
          • 调用程序
          • case ... when 用法
          • 循环+ read读写入用法
      • 结果
      • 技术总结
      • 百里鸡汤
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档