问题加入BKPF和BSEG

2020-09-17 03:34发布

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

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


你好

我遇到以下问题:

我使用以下代码创建了一个Programm:

 EXEC SQL PERFORMING loop_output。
  选择b1.BLART,b1.BELNR,b1.BUKRS,b1.BUDAT,b1.XBLNR,b1.STGRD
  INTO:从BKPF b1开始
  内部联接
 (
 SELECT BLART,BUKRS,XBLNR
 从BKPF
 在哪里BUKRS =:BUKREIS
 AND(BUDAT> =:VON或:VON ='00000000')
 AND(BUDAT <:BIS OR:BIS ='00000000')
 AND BLART ='RG'
 AND LENGTH(TRIM(XBLNR))> 1
 AND STGRD =''
 按BLART,BUKRS,XBLNR分组
 拥有计数(*)> 1
 )b2
  开1 = 1
  AND b1.BLART = b2.BLART
  与b1.BUKRS = b2.BUKRS
  与b1.XBLNR = b2.XBLNR
  ORDER BY b1.BLART,b1.BELNR,b1.BUKRS,b1.BUDAT,b1.XBLNR
 ENDEXEC。
 

我想向表BSEG添加另一个联接。 添加JOIN后,将发生错误,例如"数据库中不存在对象(表,视图索引等)"。 所以我写了一个小测试:

 REPORT ZFI_TEST。

 资料:wa的BEGIN OF
 BUKRS型BSEG-BUKRS,
 BELNR类型BSEG-BELNR,
  wa的结尾。

 执行SQL PERFORMING loop_output。
  选择b1.BUKRS,b1.BELNR
  INTO:wa
  来自bkpf b1
 ENDEXEC。

 FORM loop_output。
  写:/wa-BELNR,'',
  wa-BUKRS。

 ENDFORM。
 

如果我参考表BKPF,则一切正常。 只是将表名更改为BSEG会给我一个错误。

我该怎么做才能加入BSEG表,或者如何通过仅将SUBSELECT分组来使用ABAP和SELFJOIN解决问题。

谢谢。

Joachim

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

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


你好

我遇到以下问题:

我使用以下代码创建了一个Programm:

 EXEC SQL PERFORMING loop_output。
  选择b1.BLART,b1.BELNR,b1.BUKRS,b1.BUDAT,b1.XBLNR,b1.STGRD
  INTO:从BKPF b1开始
  内部联接
 (
 SELECT BLART,BUKRS,XBLNR
 从BKPF
 在哪里BUKRS =:BUKREIS
 AND(BUDAT> =:VON或:VON ='00000000')
 AND(BUDAT <:BIS OR:BIS ='00000000')
 AND BLART ='RG'
 AND LENGTH(TRIM(XBLNR))> 1
 AND STGRD =''
 按BLART,BUKRS,XBLNR分组
 拥有计数(*)> 1
 )b2
  开1 = 1
  AND b1.BLART = b2.BLART
  与b1.BUKRS = b2.BUKRS
  与b1.XBLNR = b2.XBLNR
  ORDER BY b1.BLART,b1.BELNR,b1.BUKRS,b1.BUDAT,b1.XBLNR
 ENDEXEC。
 

我想向表BSEG添加另一个联接。 添加JOIN后,将发生错误,例如"数据库中不存在对象(表,视图索引等)"。 所以我写了一个小测试:

 REPORT ZFI_TEST。

 资料:wa的BEGIN OF
 BUKRS型BSEG-BUKRS,
 BELNR类型BSEG-BELNR,
  wa的结尾。

 执行SQL PERFORMING loop_output。
  选择b1.BUKRS,b1.BELNR
  INTO:wa
  来自bkpf b1
 ENDEXEC。

 FORM loop_output。
  写:/wa-BELNR,'',
  wa-BUKRS。

 ENDFORM。
 

如果我参考表BKPF,则一切正常。 只是将表名更改为BSEG会给我一个错误。

我该怎么做才能加入BSEG表,或者如何通过仅将SUBSELECT分组来使用ABAP和SELFJOIN解决问题。

谢谢。

Joachim

付费偷看设置
发送
4条回答
小熊yu生菜
1楼-- · 2020-09-17 04:06

不是吗

从BKPF AS b1中选择...。

编辑:不忽略我,错过了'EXEC SQL'位。 我会回应托马斯的问题:为什么要使用本机,并尝试将其与Open SQL一起使用。

我怀疑您的问题与BSEG是集群表有关,因此在数据库级别上的存储方式有所不同。 如果同一条语句适用于openSQL,那么绝对是问题所在。

编辑2:

我没有合适的系统来检查,但您始终可以转到

SE11->实用程序->数据库对象->显示

要查看BSEG在数据库级别上的外观。

骆驼绵羊
2楼-- · 2020-09-17 04:00

您的DBMS是什么?

为什么要使用本机SQL而不是Open SQL?

骆驼绵羊
3楼-- · 2020-09-17 04:16

您应将BELNR,BUDAT和BUKRS作为关键字段。

Violet凡
4楼-- · 2020-09-17 03:56

同意。

BSEG是一个"聚集表"(在论坛上搜索以获取更多信息),这意味着它在数据库中不存在。 如果我没有记错的话,实际的表是RFBLG,但是属性字段是通过SAP算法压缩的。

因此,您将无法使用本机SQL访问它们。 而是使用Open SQL。

PS:BSEG的许多字段在索引表BSID,BSIS,BSIK,BSAD等中都是重复的,它们不是聚簇表。

一周热门 更多>