Abap OpenSQL中另一个表中的计算字段
下面的示例在MySql中工作,如何在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为什么不直接使用内部联接和分组方式
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.