ABAP新语法-删除

2020-08-25 05:26发布

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

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


专家您好!

此示例是否有新语法?

下表是带有两列C1/C2的内部表(itab):

C1 C2

X 1

X 2

Y 1

Y 5

Z 5

现在,我要删除发生C2 = 1的所有条目,条件是,如果C1的一个条目的C2 = 1,那么C1的所有相同条目也将被删除。/p>

结果应如下:

C1 C2

Z 5

这意味着:

C1 C2

X 1-> C2 = 1!

X 2-> C2为1,因此条目也被删除

Y 1->与X 1相同

Y 5->与X 2相同

Z 5->没有发生C2 = 1,这就是保持该记录的原因。

有什么新语法吗?

还..如何获得此结果?

亲切的问候

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

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


专家您好!

此示例是否有新语法?

下表是带有两列C1/C2的内部表(itab):

C1 C2

X 1

X 2

Y 1

Y 5

Z 5

现在,我要删除发生C2 = 1的所有条目,条件是,如果C1的一个条目的C2 = 1,那么C1的所有相同条目也将被删除。/p>

结果应如下:

C1 C2

Z 5

这意味着:

C1 C2

X 1-> C2 = 1!

X 2-> C2为1,因此条目也被删除

Y 1->与X 1相同

Y 5->与X 2相同

Z 5->没有发生C2 = 1,这就是保持该记录的原因。

有什么新语法吗?

还..如何获得此结果?

亲切的问候

付费偷看设置
发送
7条回答
callcenter油条
1楼 · 2020-08-25 05:43.采纳回答

没有特定于您的确切要求的"新语法"(您的意思是构造函数表达式)。

但是您当然可以用构造函数表达式编写它,不确定是否大多数可读性 的开发人员),或多或少是这样的:

 itab = VALUE#(
   LET c1_values = VALUE#(FOR 在itab中(c2 = 1)( -c1))
       itab2 = itab
   IN FOR 在itab2中
   (COND的代码行数((如果不是line_exists(c1_values [ -c1] THEN )))))。
me_for_i
2楼-- · 2020-08-25 05:34

从同一表中获取C1和C2?

悠然的二货
3楼-- · 2020-08-25 05:41

Pascal Ditzel

您正在使用哪个GUI版本?

< p>如果您使用的是7.5或更高版本,则可以按如下所述直接在内部表中写入select查询。

1)尝试从内部表中C2 = 1

2)现在只需从内部表中删除条目,其中C1的值等于从上面获取的值。

致谢!

南山jay
4楼-- · 2020-08-25 05:39

如果" LOOP AT GROUP BY"被认为是新语法,然后还有另一个变体:

 *我重用了Sandra Rossi的声明行
 类型:开始于ty_line,
          c1类型c长度1
          c2型i,
        END OF ty_line,
        带有空密钥的ty_line ty_itab类型标准表。
 DATA(itab)= VALUE ty_itab((c1 ='X'c2 = 1)
                             (c1 ='X'c2 = 2)
                             (c1 ='Y'c2 = 1)
                             (c1 ='Y'c2 = 5)
                             (c1 ='Z'c2 = 5))。


 将itab循环到c2 = 1 GROUP BY(c1 = wa-c1)的DATA(WA)中
   无成员引用DATA(gr)。
   在c1 = gr-> *的地方删除itab。  "在循环内删除
 ENDLOOP。


还有一个(使用范围):

 *我重用了Sandra Rossi的声明行
 类型:开始于ty_line,
          c1类型c长度1
          c2型i,
        END OF ty_line,
        带有空密钥的ty_line ty_itab类型标准表。
 DATA(itab)= VALUE ty_itab((c1 ='X'c2 = 1)
                             (c1 ='X'c2 = 2)
                             (c1 ='Y'c2 = 1)
                             (c1 ='Y'c2 = 5)
                             (c1 ='Z'c2 = 5))。

 ty_line-c1的数据类型范围。
 将itab循环到c2 = 1 GROUP BY(c1 = wa-c1)的DATA(WA)中
   无成员引用DATA(gr)。
   附加值#(符号='I'选项='EQ'低= gr-> *)至lr。
 结局。

 如果lr不是初始的。
   在lr中删除itab c1。  "在环外删除
 ENDIF。
My梦
5楼-- · 2020-08-25 05:39

如果我理解您的要求是正确的...

将表itab放入wa1。

如果wa1-c2 NE'1'。

使用键c1 = wa1-c1 c2 = 1将表Itab放入wa2中。

IF sy-subrc NE0。"该记录的行的C2 NE 1和C1值在任何其他记录中也不包含1。

将其移动到临时的ITAB。

ENDIF。

ENDLOOP。

现在,临时itab应该具有您需要保留的记录。

一只江湖小虾
6楼-- · 2020-08-25 05:28

使用itab1的所有条目选择itab1的查询将不起作用,因为FOR ALL ENTRIES和@itab不能一起使用。

SAP小黑
7楼-- · 2020-08-25 05:32
# p #

我在这里有点吵。 不过,这不是New语法。

选择c1,c2

FROM数据库

c2 NE 1所在的位置

AND c1 NOT IN(从db中选择c1,其中c2 NE 1)

一周热门 更多>