Abap OpenSQL中另一个表中的计算字段

Abap OpenSQL中另一个表中的计算字段,abap,opensql,Abap,Opensql,下面的示例在MySql中工作,如何在OpenSql中实现这一点 SELECT StudentID, Name, ( SELECT COUNT(*) FROM StudentExam WHERE StudentExam.StudentID = Student.StudentID ) AS ExamsTaken FROM Student ORDER BY ExamsTaken DESC; SAP基础版本:740-13为什么不直接使用内部联接和分组方式

下面的示例在MySql中工作,如何在OpenSql中实现这一点

 SELECT StudentID, Name,
     ( SELECT COUNT(*) FROM StudentExam
      WHERE StudentExam.StudentID = Student.StudentID )
      AS ExamsTaken
   FROM Student
   ORDER BY ExamsTaken DESC;
SAP基础版本:740-13

为什么不直接使用内部联接和分组方式?如果你还想介绍那些没有参加考试的学生,那么你可以通过联盟来实现

下面是OpenSQL中的一些实际示例

REPORT zzz.

START-OF-SELECTION.
  SELECT scarr~carrid, scarr~carrname, COUNT(*) AS examstaken
    FROM scarr INNER JOIN sflight
    ON scarr~carrid = sflight~carrid
    GROUP BY scarr~carrid, scarr~carrname
  UNION
  SELECT scarr~carrid, scarr~carrname, 0 AS examstaken
    FROM scarr
    WHERE carrid NOT IN ( SELECT carrid FROM sflight WHERE carrid = scarr~carrid )
  ORDER BY examstaken DESCENDING " <== applies to the union of both SELECT
  INTO TABLE @DATA(g_tab_result).
BREAK-POINT.
结果如下


内部连接不好,因为它不会列出未经考试的学生。LEFT JOIN列出了它们,但examstakes=1而不是0,然后使用UNION查找缺少的条目。我已经更新了我的答案。
REPORT zzz.

START-OF-SELECTION.
  SELECT scarr~carrid, scarr~carrname, COUNT(*) AS examstaken
    FROM scarr INNER JOIN sflight
    ON scarr~carrid = sflight~carrid
    GROUP BY scarr~carrid, scarr~carrname
  UNION
  SELECT scarr~carrid, scarr~carrname, 0 AS examstaken
    FROM scarr
    WHERE carrid NOT IN ( SELECT carrid FROM sflight WHERE carrid = scarr~carrid )
  ORDER BY examstaken DESCENDING " <== applies to the union of both SELECT
  INTO TABLE @DATA(g_tab_result).
BREAK-POINT.