DISTINCT子句自动添加到查询

2020-08-16 16:37发布

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

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


我们在ABAP代码中有一个开放的SQL语句,如下所示。

类型:
      ty_vbak的开始。
          包括类型vbak。
          类型:asttx TYPE asttx,
          asttx_t TYPE j_txt30,
      结束于ty_vbak。

 数据:带有唯一键vbeln的ty_vbak的lt_temp_vbeln类型哈希表

 SELECT head〜vbeln
        表lt_temp_vbeln的对应字段
 ........ 

现在在SQL Server上执行此代码时,在ST12中,我们可以看到DISTINCT子句已添加到查询中,如下所示

 SELECT DISTINCT" HEAD"。" VBELN"
 FROM(" VBAK" ....)
 

所以我的问题是,如何将DISTINCT子句添加到查询中?

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

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


我们在ABAP代码中有一个开放的SQL语句,如下所示。

类型:
      ty_vbak的开始。
          包括类型vbak。
          类型:asttx TYPE asttx,
          asttx_t TYPE j_txt30,
      结束于ty_vbak。

 数据:带有唯一键vbeln的ty_vbak的lt_temp_vbeln类型哈希表

 SELECT head〜vbeln
        表lt_temp_vbeln的对应字段
 ........ 

现在在SQL Server上执行此代码时,在ST12中,我们可以看到DISTINCT子句已添加到查询中,如下所示

 SELECT DISTINCT" HEAD"。" VBELN"
 FROM(" VBAK" ....)
 

所以我的问题是,如何将DISTINCT子句添加到查询中?

付费偷看设置
发送
9条回答
Violet凡
1楼-- · 2020-08-16 17:08

嗨,

可能是因为目标内部表是散列的。 也许您的SELECT语句的其余部分将导致重复的条目,并且OpenSQL通过将其修复并避免出现短暂的转储场景而成为一个好人。 还是仅仅是针对目标哈希表的通用OpenSQL转换。

Haoba3210
2楼-- · 2020-08-16 16:56

问题的附录-完整代码摘自OP注释:

数据:lt_temp_vbeln ty_vbak类型的哈希表 唯一键vbeln,
       lt_rg_vbeln vbak-vbeln的类型范围。
     
  SELECT head〜vbeln
        表lt_temp_vbeln的对应字段
        FROM(lv_from_clause)
        对于lt_rg_vbeln中的所有条目
        哪里head〜vbeln = lt_rg_vbeln-low
          AND head〜vbtyp = c_vb_type
          AND head〜trvog = c_trvog。

请完成您的问题:您是说您不知道什么? 但为什么? 如果您的意思是要使用重复的值(?),而不是使用HEAD〜VBELN的不同值,那是没有意义的! 还是只想计数? 如果是这样,请使用GROUP BY和HEAD〜VBELN,COUNT(*)...请解释。

太Q了
3楼-- · 2020-08-16 17:13

你好 Amardeep Verma

您尚未显示整个SQL语句。 您是否有所有条目?

所有条目 与DISTINCT的作用相同,尽管有时重复项会直接在数据库中(有时在应用程序服务器中)直接删除。

亲切的问候,
Mateusz

从提到的SAP帮助文档中摘录:对于在结果集中出现多次的行,对于所有条目的加法与在选择集的定义中指定加法DISTINCT时具有相同的效果。 与DISTINCT不同,行并不总是从数据库系统中删除,而是有时首先从应用程序服务器上的结果集中删除。 如果可以将SELECT语句作为单个SQL语句传递到数据库系统,则从数据库系统中删除重复的行。 此处支持添加DISTINCT。 如果SELECT语句需要在传递之前分配给多个SQL语句,或者在SELECT列表中指定了STRING和RAWSTRING加上LCHR和LRAW类型的列,则这些行将在应用程序服务器上聚合。

Doze时光
4楼-- · 2020-08-16 16:46

我想要DISTINCT。 我们注意到在开发环境中DISTINCT关键字会自动添加。 我们根本没有添加DISTINCT子句。 我们表现​​良好。 在同一SQL代码的QA环境中,不会自动添加DISTINCT关键字。 而且我们的性能很差。

我不希望重复值。 我想要独特的价值。 从查询的输出中,我们正在获取其他详细信息。 我们也做一个计数。

我要去的地方是,如果我理解为什么在我们未为其编码时会自动添加DISTINCT子句,那将会很有帮助。

希望这会有所帮助。

我如何检查DISTINCT子句何时通过openSQL Conversion添加?

大道至简
6楼-- · 2020-08-16 17:10

不是因为数据库语句未使用DISTINCT,ABAP内核(dbsl部分,即"数据库共享库")并未删除重复项。 此外,正如Mateusz所说,您必须确保FAE表(lt_rg_vbeln)不为空,否则将返回表的所有行。

一周热门 更多>