选择加入

2020-08-16 09:25发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


将为给定供应商选择的数据与为其他供应商选择的数据进行比较。

比较以下字段:

名称:LFA1- NAME1

地址ID:LFA1 – ADRNR

街道:LFA1 – STRAS

城市:LFA1-ORT01

增值税注册号:LFA1 – STCEG

电话号码:ADR2-TEL_NUMBER

银行帐户:LFBK – BANKN

如果任何字段与所选数据中的另一个供应商匹配,则该供应商将添加到输出数据集中。

当记录相同时,如何从表(lfba1,lfb1,adr2和lfbk)中选择记录并将其加入新表? 在ABAP中

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


将为给定供应商选择的数据与为其他供应商选择的数据进行比较。

比较以下字段:

名称:LFA1- NAME1

地址ID:LFA1 – ADRNR

街道:LFA1 – STRAS

城市:LFA1-ORT01

增值税注册号:LFA1 – STCEG

电话号码:ADR2-TEL_NUMBER

银行帐户:LFBK – BANKN

如果任何字段与所选数据中的另一个供应商匹配,则该供应商将添加到输出数据集中。

当记录相同时,如何从表(lfba1,lfb1,adr2和lfbk)中选择记录并将其加入新表? 在ABAP中

付费偷看设置
发送
4条回答
骆驼绵羊
1楼-- · 2020-08-16 09:50

你好 Ramin Adib

类似下面的代码。 不能100%确定它是否可以工作,而是在论坛的编辑器中编写了它。 另外,不确定性能。

 SELECT lfa1〜lifnr
   来自lfa1
   加入adr2
     ON adr2〜addrnumber = lfa1〜adrnr
   加入lfbk
     开启lfbk〜lifnr = lfa1〜lifnr
   左外连接lfa1 AS lfa1_copy
     ON(lfa1_copy〜name1 = lfa1〜name1或lfa1_copy〜adrnr = lfa1〜adrnr或/和LFA1/中的其他字段)
     AND lfa1_copy〜lifnr <> lfa1〜lifnr
   左外连接adr2 AS adr2_copy
     开启adr2_copy〜tel_number = adr2〜tel_number
     AND adr2_copy〜addrnumber <> adr2〜adrnr
   左外加入lfbk AS lfbk_copy
     开启lfbk_copy〜bankn = lfbk〜bankn
     AND lfbk_copy〜lifnr <> lfbk〜lifnr。
   lfa1_copy〜lifnr不为空
      或adr2_copy〜adrnr不为空
      或lfbk_copy〜lifnr不能为空。

但是此查询即使有效(我不确定100%肯定)也有一个重大问题-只有在所有表中都有记录的供应商(LFA1, 比较ADR2,LFBK。

如果要分别比较这些表,则可能需要编写多带带的查询。

亲切的问候

Mateusz
Bunny_CDM
2楼-- · 2020-08-16 09:26

你好 Ramin Adib

是的,如果我正确理解了您的要求, 并查看您已经编写的内容,您至少需要再执行一次SELECT查询,才能使供应商获得相同的数据。 但是,您要检查的大多数这些字段看起来都不像被索引的字段。 这意味着基于这些字段的数据库查询(对于某些表使用OR条件)可能会非常慢(取决于您拥有的数据库引擎,如果您在HANA上运行,则可能会有所不同)。

如果仅选择列出的那些字段,那么我想知道将所有记录加载到内部表并比较内存中的字段值不是更好的主意。

< p>亲切的问候,

Mateusz

代楠1984
3楼-- · 2020-08-16 09:36

这取决于您的需求。

1)

您还可以为一个字段创建简单的SQL选择。 即名称。

然后使用UNION选择其他字段(例如Street)的供应商。

以此类推。

UNION仅返回唯一的行。 所以最后没有重复。

2)

在某些情况下,EXISTS也可能是一种选择。

最诚挚的问候

Rafal

小灯塔
4楼-- · 2020-08-16 09:36
感谢重播我,
 *对于第一步,在我的任务的第一部分中,我编写了这段代码及其工作。
 表:LFA1,LFB1,LFBK,ADR2。

 B1块的选择屏幕开始,框架标题为text-001。

 select-OPTIONS:LFA1-KTOKK的S_kTOKK,
 LFB1-BUKRS的S_BUKRS。

 B1块的SELECTION-SCREEN结束。

 *选择LFA1〜*

 选择
 LFA1〜LIFNR,
 LFA1〜NAME1,
 LFB1〜BUKRS,
 LFA1〜ADRNR,
 LFA1〜STRAS,
 LFA1〜ORT01,
 LFA1〜PSTLZ,
 LFA1〜STCEG,
 LFB1〜ERDAT,
 LFBK〜BANKN,
 ADR2〜TEL_NUMBER,
 LFA1〜SPERR,
 LFB1〜SPERR作为SPERRB


 从LFA1内连接LFB1到LFA1〜LIFNR eq LFB1〜LIFNR
 LFBK〜LIFNR eq LFA1〜LIFNR上的内连接LFBK
 LFA1〜ADRNR eq ADR2〜ADDRNUMBER上的LEFT JOIN ADR2
 @S_KTOKK中的LFA1〜KTOKK和@S_BUKRS中的LFB1〜BUKRS
 插入表@data(Lt_Vendors)。
 **对于从这4个表中选择并连接具有相同值的字段的第二步,我不需要**新的选择。
 从逻辑上讲,我需要一个输出表(X),该选择表和联接表是此表中的那些/此字段(FLA1,FLB1,ADR2和LFBK),它们在此字段中具有相同的值,例如
 **(
 数据源
 LFA1-LIFNR
 LFA1-NAME1
 LFB1-BUKRS
 LFA1-ADRNR
 LFA1-STRAS
 LFA1-ORT01
 LFA1-PSTLZ
 ADR2-TEL_NUMBER
 LFA1-STCEG
 LFBK银行
 LFB1-ERDAT
 LFA1-SPERR
 LFB1-SPERR
 )。**

 **和这样的输出
 **以下列用于输出列表:
 *列数据来源:**
 *(↓↓
 供应商ID LFA1-LIFNR
 供应商名称LFA1-NAME1
 公司代码LFB1-BUKRS
 地址编号LFA1-ADRNR
 街道LFA1-STRAS
 城市LFA1-ORT01
 邮政编码LFA1-PSTLZ
 电话ADR2-TEL_NUMBER
 增值税号码LFA1-STCEG
 银行帐户LFBK-BANKN
 创建日期LFB1-ERDAT
 中央发布块LFA1-SPERR
 公司发布块LFB1-SPERR
 )

一周热门 更多>