ABAP,SQL,是否可以在单个查询中处理 N-M 关系?

ABAP, SQL, Is it possible to handle N-M relation in single query?

我还没有找到一种在 ABAP 中编写查询的方法,该查询将为我提供具有 N-M 关系的表中的数据。

ZTINTF_EMPASS 描述:

问题描述:

SQL 服务器可能的查询示例(with 子句包含仅用于模拟的数据):

with ztintf_empass (mandt, emp_no, pos_no, start_date) as (
select 100, '000000001001', 101, CONVERT(DATETIME, '01.07.2014', 102) union all
select 100, '000000001002', 102, CONVERT(DATETIME, '01.06.2014', 102) union all
select 100, '000000001003', 102, CONVERT(DATETIME, '01.01.2000', 102) union all
select 100, '000000001003', 103, CONVERT(DATETIME, '01.01.2010', 102) union all
select 100, '000000001004', 202, CONVERT(DATETIME, '01.01.2000', 102) union all
select 100, '000000001005', 201, CONVERT(DATETIME, '01.06.2016', 102) union all
select 100, '000000001005', 301, CONVERT(DATETIME, '01.05.2015', 102) union all
select 100, '000000001006', 401, CONVERT(DATETIME, '01.01.2000', 102) union all
select 100, '000000001006', 402, CONVERT(DATETIME, '01.09.2010', 102) union all
select 100, '000000001006', 403, CONVERT(DATETIME, '01.10.2015', 102) union all
select 100, '000000001006', 501, CONVERT(DATETIME, '01.03.2019', 102) 
) 
select a.emp_no
     , pos_no
     , a.start_date 
  from ztintf_empass a
       inner join (
           select emp_no
                , max(start_date) start_date
             from ztintf_empass 
            group by emp_no
       ) g on g.emp_no = a.emp_no
          and g.start_date = a.start_date
;

我确实想在 ABAP 中通过单个查询获得准确的结果。

预期结果:

emp_no        pos_no  start_date
000000001001  101     01.07.2014
000000001002  102     01.06.2014
000000001003  103     01.01.2010
000000001004  202     01.01.2000
000000001005  201     01.06.2016
000000001006  501     01.03.2019

我在这上面花了一些时间但没有效果 - 有可能吗?

您认为数据之间的某些关系存在非常奇怪的限制,但 ABAP 对您的数据一无所知,因此它允许您在具有任何(可能没有)关系的表之间进行连接。 SELECT 的语法在 ABAP help 中可用。在这里你可以发现data_source定义中没有子查询的位置。

解决方法是:

  • CDS view 有更多 SQL 选项可用。您也可以创建聚合视图并将其用作数据源。
  • 对于 HANA,有 AMDP methods for classes,您可以在其中为 HANA 数据库编写任何有效的 SQL 脚本代码。在这里,您在方法定义中声明了 DDIC 对象,因此 where-used 列表将向您显示存储库中对象的使用情况。您还可以调用非 ABAP 对象,在 DBMS 中可用,带有模式前缀标识符:schema.object.
  • CL_SQL_STATEMENT class,您可以在其中为您的数据库编写任何有效的 SQL 语句。但是,当然,没有 SQL 语法检查或任何使用的功能。