ABAP写:inTab = select * from :inTab where ((/BIC/AZECRM_JE2 INNER JOIN /BIC/AZEQUOTDEX2 ON /BIC/AZEQUOTDEX2~OBJNR = /BIC/AZEQUOTDEX2~QUOT_GUID)INNER JOIN /BIC/AZEP_PD32 ON /BIC/AZECRM_JE2-OBJNR = /BIC/AZEP_PD32~GUID)INNER JOIN /BIC/AZEP_PD2 as Member ON Member~GUID=/BIC/AZEP_PD32~GUID;报错了怎么事
时间: 2023-08-12 19:05:51 浏览: 60
根据您提供的ABAP代码片段,您正在尝试使用INNER JOIN连接多个表,并将结果存储在名为`inTab`的内部表中。然而,根据给出的代码,存在一些语法错误导致错误的发生。
请注意,ABAP中的INNER JOIN语句应该是在FROM子句中使用,而不是在WHERE子句中。此外,您在代码中引用的表名`/BIC/AZEP_PD2`和`/BIC/AZEP_PD32`应该与您的实际表名相匹配。
以下是一个修正后的代码示例:
```abap
SELECT *
FROM /BIC/AZECRM_JE2 AS JE2
INNER JOIN /BIC/AZEQUOTDEX2 AS QUOTDEX2
ON QUOTDEX2~OBJNR = JE2~QUOT_GUID
INNER JOIN /BIC/AZEP_PD32 AS PD32
ON JE2~OBJNR = PD32~GUID
INNER JOIN /BIC/AZEP_PD2 AS Member
ON Member~GUID = PD32~GUID
INTO TABLE @inTab.
```
请注意,我对表名进行了假设,您需要根据实际情况进行调整。此外,根据您的需求,您可能还需要添加其他逻辑和条件来细化您的查询。
如果问题仍然存在,请提供更详细的错误信息,以便我能够更准确地帮助您解决问题。
相关问题
LOOP AT RESULT_PACKAGE INTO LS_MEBPC_O062. IF LS_MEBPC_O062-/BIC/M_HRKMBM <> '19' AND LS_MEBPC_O062-/BIC/M_RYLX = '中方' . IF LS_MEBPC_O062-/BIC/M_ZJ+0(1) = 'E'. LS_MEBPC_O062-/BIC/M_ZL = 'JT2'. ELSE. LS_MEBPC_O062-/BIC/M_ZL = 'JT1'. ENDIF. COLLECT LS_MEBPC_O062 INTO RESULT_PACKAGE . ENDIF. ENDLOOP. CLEAR LS_MEBPC_O062.
根据您提供的 ABAP 代码,我可以看出这是一个循环遍历内部表 RESULT_PACKAGE 的代码段。在每次循环中,它检查一个名为 LS_MEBPC_O062 的结构体中的字段值,并根据一些条件进行处理。
根据代码逻辑,如果 `/BIC/M_HRKMBM` 字段不等于 '19' 并且 `/BIC/M_RYLX` 字段等于 '中方',则会执行条件语句。在条件语句中,如果 `/BIC/M_ZJ` 字段的第一个字符是 'E',则将 `/BIC/M_ZL` 字段设置为 'JT2';否则,将其设置为 'JT1'。然后,使用 COLLECT 语句将修改后的结构体 `LS_MEBPC_O062` 添加到内部表 `RESULT_PACKAGE` 中。
最后,在循环结束后,使用 CLEAR 语句清除 `LS_MEBPC_O062` 结构体的内容。
请注意,这只是根据您提供的代码片段做出的初步分析。如果您有更具体的问题或需要进一步的帮助,请提供更多上下文信息,以便我能够更准确地回答您的问题。
LOOP AT RESULT_PACKAGE INTO LS_MEBPC_O062. IF LS_MEBPC_O062-/BIC/M_HRKMBM <> '19' AND LS_MEBPC_O062-/BIC/M_RYLX = '中方' . IF LS_MEBPC_O062-/BIC/M_ZJ+0(1) = 'E'. LS_MEBPC_O062-/BIC/M_ZL = 'JT2'. ELSE. LS_MEBPC_O062-/BIC/M_ZL = 'JT1'. ENDIF. COLLECT LS_MEBPC_O062 INTO RESULT_PACKAGE . ENDIF. ENDLOOP. CLEAR LS_MEBPC_O062. 数据翻倍
在您提供的 ABAP 代码中,数据翻倍的问题是由于在循环内部使用 COLLECT 语句导致的。每当 COLLECT 语句执行时,会将当前的 LS_MEBPC_O062 结构体添加到 RESULT_PACKAGE 内部表中,从而导致内部表中的数据翻倍。
要解决数据翻倍的问题,您可以使用一个临时的内部表来保存符合条件的结构体,然后在循环结束后将临时内部表的内容复制回 RESULT_PACKAGE 内部表。以下是修改后的代码示例:
DATA: lt_temp TYPE TABLE OF ls_mebpc_o062. " 临时内部表
LOOP AT result_package INTO ls_mebpc_o062.
IF ls_mebpc_o062-/BIC/M_HRKMBM <> '19' AND
ls_mebpc_o062-/BIC/M_RYLX = '中方'.
IF ls_mebpc_o062-/BIC/M_ZJ+0(1) = 'E'.
ls_mebpc_o062-/BIC/M_ZL = 'JT2'.
ELSE.
ls_mebpc_o062-/BIC/M_ZL = 'JT1'.
ENDIF.
APPEND ls_mebpc_o062 TO lt_temp. " 将符合条件的结构体添加到临时内部表
ENDIF.
ENDLOOP.
CLEAR result_package. " 清空 RESULT_PACKAGE 内部表
LOOP AT lt_temp INTO ls_mebpc_o062.
COLLECT ls_mebpc_o062 INTO result_package. " 将临时内部表的内容复制回 RESULT_PACKAGE 内部表
ENDLOOP.
CLEAR ls_mebpc_o062. " 清空 LS_MEBPC_O062 结构体
CLEAR lt_temp. " 清空临时内部表
在修改后的代码中,我们引入了一个临时的内部表 lt_temp,用于存储符合条件的 LS_MEBPC_O062 结构体。在循环中,如果结构体满足条件,则将其添加到临时内部表中。然后,在循环结束后,将临时内部表的内容复制回 RESULT_PACKAGE 内部表。最后,使用 CLEAR 语句清空 LS_MEBPC_O062 结构体和临时内部表。
这样做可以避免数据翻倍的问题。希望这能帮助到您!如果您有任何其他问题,请随时提问。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)