SQLScript从本地表变量中删除重复项

2020-09-21 09:16发布

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

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


嗨,专家们。

我有一个问题。 我需要从AMDP的本地表变量中删除重复项。

我找到了

从选项卡
中删除,其中" $ rowid $"在
中(
从选项卡
中的(按字段1,字段2进行分区)中选择SELECT引线($ rowid $));

但是对于本地表变量,它不起作用。

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

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


嗨,专家们。

我有一个问题。 我需要从AMDP的本地表变量中删除重复项。

我找到了

从选项卡
中删除,其中" $ rowid $"在
中(
从选项卡
中的(按字段1,字段2进行分区)中选择SELECT引线($ rowid $));

但是对于本地表变量,它不起作用。

付费偷看设置
发送
5条回答
Haoba3210
1楼 · 2020-09-21 09:59.采纳回答

现在,这是一个很好的例子,说明了为什么应该尝试询问如何实现某些目标,而不是如何在总体解决方案中进行这一小步骤。

您的问题实际上是:为我提供每种物料,工厂和年份组合的最新月份记录。

有一个相当简单的方法。

  1. 找出每个物料|年份的最新月份。
  2. 仅从表中选择与最近月份有关的那些记录。

第1步是简单的MAX()聚合。

第2步是通过INNER JOIN轻松进行过滤

选择s.matnr,s.werks,s.gjahr,s.monat,s.stock
 库存
 内部联接(选择matnr,werks,gjahr,max(monat)作为max_month
             库存
             按Matnr,Werks,Gjahr分组)ms
        于(s.matnr,s.werks,s.gjahr,s.monat)
           =(ms.matnr,ms.werks,ms.gjahr,ms.max_month); 

使用您的演示数据,结果如下:

 MATNR WERKS GJAHR莫纳特股票
 1000000000 1000 2017年05 0
 1000000001 1000 2018 03 3 
bbpeas
2楼-- · 2020-09-21 09:53

识别并使用SQLScript删除重复项,另一种方法可以将Row_Number()与Partition By子句一起使用。 可以在Row_Number()函数的Partition By子句中使用接受的用于定义重复大小写的列。

这是一个样本

 et_data =从(选择kunnr,vbeln
     从(lt_data)的rn,*中选择row_number()作为(按kunnr按vbeln排序)
     )其中rn = 1;
 

SQL以上返回客户的第一订单

如果您在Partition By子句中添加了更多列(此处仅使用kunnr),或者所有列都比行数据的完全重复。

小灯塔
3楼-- · 2020-09-21 09:50

表变量的删除是 仅从HANA 2开始可用。您使用HANA 2吗?

此外,从未支持使用内部列存储列$ rowid $-在没有键的情况下使用它来消除重复记录并不是最明智的主意。

您可以轻松地从表变量中选择DISTINCT。

 tab_dupes = SELECT ... FROM all_my_dupes;
 tab_nodupes =选择区域*从:tab_dupes; 

就是这样。 没有奇怪的内部列内容,没有对表变量的困难更新。

对于仅在列子集上有重复项的情况,例如 您可以将关键列用作标准选项,例如选择最大的值(如果"最大"是唯一的)或仅获取第一个/最后一个条目。 但这也就是所有标准SQL ...

路亽曱_Ryan
4楼-- · 2020-09-21 10:03

谢谢, ERALPER YILMAZ

这是删除重复项的最佳方法。

shere_lin
5楼-- · 2020-09-21 10:09

谢谢,拉尔斯。

这可以解决我的问题。

一周热门 更多>