前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ABAP 之 多个内表相互关联的几种方式

ABAP 之 多个内表相互关联的几种方式

作者头像
百里丶落云
发布2022-12-10 14:38:31
1.3K0
发布2022-12-10 14:38:31
举报
文章被收录于专栏:享~方法

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

HELLO,大家好,这里是百里,一个学习中的ABAPER,在SAP的开发中,肯定避免不了获取多个透明表标准数据, 通过多个表相互关联获取对应报表或者实现某种功能.那么我们该如何实现多个内表相互关联的方式呢, 从此引入.

为什么要获取内容数据

为了保证数据的冗余性,SAP 标准表将数据分为多个标准表内存放,不同之间的有主从键相互关联.或者不同的表有相互关联字段,从而串通起来整个业务关系.我们一般是将报表或者功能的主要数据获取数据称之为主数据,其他的数据通过单独存入内容,循环或者接拼接等方式存进最终使用内表.

使用 join的方式将多个内表进行关联

在SAP HANA 数据库中,我们可以想sql 一样使用,将内容当做透明表数据即可,我们就可以通过关联的方式获取内表数据.

案例

我们这使用销售订单的VBAK 及 VABP 透明表当做案例.将VBAK 及 VBAP 的数据分别取出放在对应不同的内表数据中,然后采用join的方式的按照对应的条件进行关联,从而获取数据.

内表数据关联

代码语言:javascript
复制
# 获取VBAK的数据到临时内表中
select vbeln , ERDAT ,ERZET ,ERNAM from vbak AS A into table @data(lt_vbak) .
# 获取VBAP的数据到临时内表中
select vbeln , POSNR ,MATNR ,MATWA from vbap AS Ainto table @data(lt_vbap) . 

#通过inner join 将要两个内表相互关联

select a~vbeln ,a~ERDAT ,A~ERZET , A~ERNAM , B~POSNR ,B~MATNR ,B~MATWA
FROM @LT_VBAP AS A INNER JOIN @LT_VBAP AS B ON A~VBELN = B~VBELN INTO TABLE @DATA(LT_GATA) . 

此时我们的两个内表数据通过关联就新放入到对应的新内表(LT_GATA) 中.

使用WITH 的方式将两个内表关联

在SAP HANA版本中,我们可以使用WITH 的方式,从对应的标准表中把数据存放入对应的内表数据,在通过查询内表的方式,取出对应的数据.

案例

我们依然使用销售订单的VBAK 及 VBAP 表,取数据逻辑与上面相同都是关联,但是写入方式不一样.

WITH 关联

代码语言:javascript
复制
TABLES:vbak,vbap.
WITH
    +vbak AS
    ( SELECT vbeln, ernam FROM vbak  ),

    +vbap AS
    ( SELECT vbeln, posnr FROM vbap  )

  SELECT a~vbeln ,
         b~posnr ,
         a~ernam
    FROM +vbak AS a
    INNER  JOIN +vbap AS b ON a~vbeln EQ b~vbeln
    INTO TABLE @DATA(lt_gata).

此时我们实现了和案例一一样的结果,但是我们仅仅在一个sql 就实现了. 不过这种使用也有缺点,就是没办法精确的debug ,因为系统会认为这是一个sql 语句. 不过优点就是比方案1快 不少,因为减少了相关的IO 操作.

使用LOOP 循环的方式进行关联

这种方式,可以说是经常使用,为什么呢,因为ABAP 中并没有那么灵活,而且用户的业务是多种多样的,我们没办法那么灵活的解决大部分问题,只能采用此种笨方法, 当然也是基础方法.

比如经常遇到的区间案例,号码案例,求和案例,最大值最小值案例. 我们呢就可以先将主数据存入到对应的主内表,然后其他的数据经过复杂的计算逻辑存入内表,经过关联到输出内表中.

案例

代码语言:javascript
复制
# 获取VBAK的数据到临时内表中
select vbeln , ERDAT ,ERZET ,ERNAM from vbak AS A into table @data(lt_vbak) .
# 获取VBAP的数据到临时内表中
select vbeln , POSNR ,MATNR ,MATWA from vbap AS Ainto table @data(lt_vbap) . 

move lt_vbak to gt_data.
loop at lt_vbak into data(ls_vbak) .

read table lt_vbap into data(ls_vbap) witn key vbeln = ls_vbak-vbeln . 

gs_data-posnr = ls_vbap-posnr .
......省略. 

modify  gt_data from gs_data tramforming  vbeln =  ls_Vbak-vbeln. 

clear ls_vbak .

endloop .

没错就是这么多又这么麻烦. 但是不得不用,因为复杂的东西我们不太方便只用一个或者简单几个sql 就可以实现相关功能.

技术总结

今天讲述的是内表的相互关联的几种方式,其中包括数据量不大业务逻辑少的 join 关联 ,with 关联, 还有业务复杂使用传统loop 关联的三种方式, 各位各取所需,没有说哪种比较好,按照实际应用自己判断即可.

百里鸡汤

月缺不改光,剑折不改刚,有志向的人自信自强。

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么要获取内容数据
  • 使用 join的方式将多个内表进行关联
    • 案例
      • 内表数据关联
  • 使用WITH 的方式将两个内表关联
    • 案例
      • WITH 关联
  • 使用LOOP 循环的方式进行关联
    • 案例
    • 技术总结
    • 百里鸡汤
    相关产品与服务
    腾讯云 BI
    腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档