从Oracle SQL转换为Open SQL的帮助

2020-09-04 21:35发布

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

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


大家好,

(我很抱歉,因为我对SAP或Open SQL都不很了解)

我正在尝试从Oracle转换以下SQL语句:

选择1
 来自sapsr3.zt01 t1
 内连接sapsr3.zt01 t2 ON(
         (
             t1.number_from <= t2.number_to
             AND t2.number_from <= t1.number_to
             )
         并不是 (
             t1.number_from = t2.number_from
             AND t2.number_to = t1.number_to
             )
         )
 t1.dat1 ='00000000'; 

(在这种情况下,我正在尝试检测可能重复或重叠的数字范围(number_from,number_to)。

因此,我以我认为正确的OPEN SQL语法编写此代码:

选择t1〜str1到w_str
 从zt01作为t1
 内联zt01为t2 ON(
         (
             t1〜number_from <= t2〜number_to
             AND t2〜number_from <= t1〜number_to
             )
         并不是 (
             t1〜number_from = t2〜number_from
             AND t2〜number_to = t1〜number_to
             )
         )
 t1〜dat1 ='00000000'。

然后我发现我不能在ON子句中使用NOT ...在其他任何SQL中,我都可以通过将括号内的所有关系取反,将=更改为<>并将AND更改为OR来省略NOT子句。 但是,似乎OPEN SQL也不喜欢OR。

有什么想法吗?

预先感谢

路易斯


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

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


大家好,

(我很抱歉,因为我对SAP或Open SQL都不很了解)

我正在尝试从Oracle转换以下SQL语句:

选择1
 来自sapsr3.zt01 t1
 内连接sapsr3.zt01 t2 ON(
         (
             t1.number_from <= t2.number_to
             AND t2.number_from <= t1.number_to
             )
         并不是 (
             t1.number_from = t2.number_from
             AND t2.number_to = t1.number_to
             )
         )
 t1.dat1 ='00000000'; 

(在这种情况下,我正在尝试检测可能重复或重叠的数字范围(number_from,number_to)。

因此,我以我认为正确的OPEN SQL语法编写此代码:

选择t1〜str1到w_str
 从zt01作为t1
 内联zt01为t2 ON(
         (
             t1〜number_from <= t2〜number_to
             AND t2〜number_from <= t1〜number_to
             )
         并不是 (
             t1〜number_from = t2〜number_from
             AND t2〜number_to = t1〜number_to
             )
         )
 t1〜dat1 ='00000000'。

然后我发现我不能在ON子句中使用NOT ...在其他任何SQL中,我都可以通过将括号内的所有关系取反,将=更改为<>并将AND更改为OR来省略NOT子句。 但是,似乎OPEN SQL也不喜欢OR。

有什么想法吗?

预先感谢

路易斯


付费偷看设置
发送
5条回答
小灯塔
1楼-- · 2020-09-04 22:02

首先,我在ON子句中使用NOT没问题。 您的ABAP版本是什么(我的版本是7.4):

 SELECT * FROM sflight内连接spfli ON((sflight〜carrid = spfli〜carrid)AND
                                             不(sflight〜connid = spfli〜connid))
   第二,我认为您的查询如下所示(假设两个表的from_date  
 SELECT t1〜str1
 FROM zt01 as t1 INNER JOIN zt01 as t2 ON((t1〜number_from <= t2〜number_to与
                                              t1〜number_from> t2〜number_from)AND
                                              t1〜number_to> t2〜number_to)
    进入w_str
 WHERE t1〜dat1 ='00000000'。

第三,我认为最好根据它们的键来联接表,您的查询感觉像是WHERE条件,而不是联接条件。

土豆飞人
2楼-- · 2020-09-04 21:47
< p>奎恩,

感谢您的回答。 不幸的是,我们在ABAP版本(7.00)上处于黑暗时代,并且编译器消息非常清楚,在使用ON子句时不允许NOT或OR的事实:

用户需要检查特定范围(甚至可以是一个范围,例如5到5)与Z表中的另一个范围(例如4到7)不一致。 让我尝试您的代码,然后再发表评论。 另外,如Sandra所写,请将其转换为答案以便可以投票。

再次感谢,
Luis

Bunny_CDM
3楼-- · 2020-09-04 21:39

在7.0中 ,也许可以使用技巧在client列上进行联接(如果不存在,则添加该列),使用CLIENT SPECIFIED字词指定客户端,然后将所有当前联接条件推送到WHERE子句中。

Climb_Ma
4楼-- · 2020-09-04 21:37

Sandra Rossi

Idk我做了什么更改,但 有人照常提及我的名字时,通知将不起作用。

路易斯·罗德里格斯

在那种情况下,我认为您可以稍作更改,导致from_date <= to_date,因此to_date仅需要彼此不同:

 SELECT t1〜str1
 FROM zt01 as t1 INNER JOIN zt01 as t2 ON((t1〜number_from <= t2〜number_to与
                                              t1〜number_from> t2〜number_from)AND
                                              t1〜number_to <> t2〜number_to)
    进入w_str
 t1〜dat1 ='00000000'。
Cikesha
5楼-- · 2020-09-04 21:43

一周热门 更多>