编译器错误 Select 循环中的单次计数 SQL

Compiler error Select Single Count when in Loop SQL

我制作了一个 table,其中添加了 material 数字、material 文本等 (selected_materials)。现在我想用这个 table 创建一个循环,以便它在 EKPO table 中计算 material 号码被提及的频率,以便以后使用它。

对于下面的代码,编译器说 WHERE <selected_material>-matnr 是无效的,即使 WRITE: ... <selected_material>-matnr = ... 是有效的。

  LOOP AT selected_materials ASSIGNING <selected_material>.

    DATA: lv_count TYPE i.

    SELECT SINGLE COUNT(*)
      From Ekpo 
      INTO lv_count 
      WHERE <selected_material>-matnr = Ekpo-matnr.

    WRITE: <selected_material>-maktx, <selected_material>-matnr, <selected_material>-meins, <selected_material>-msehl, <selected_material>-ekpo_count.
    NEW-LINE.

  ENDLOOP.

你的WHERE条件不正确,应该是这样的:

SELECT COUNT( * )
  FROM ekpo 
  INTO lv_count 
  WHERE matnr EQ <selected_material>-matnr.

请注意 SINGLE 也被删除,因为(我猜)问题是,material 数字(SELECT COUNT( * ))在 EKPO 中有多少条目。 ..) 而不是,如果至少有一个 (SELECT SINGLE COUNT( * )...)

还有一件事:在 WRITE 中显示字段:-ekpo_count,但是在 SELECT COUNT( * ) 中使用 lv_count。

在 ABAP 7.40 SP 05 之前,运算符左侧的操作数必须是列名(参见 József Szikszai 的回答)。

从 ABAP 7.40 SP 05 开始,有“strict mode”允许更复杂的 SQL 功能。严格模式主要是通过ABAP变量名前的@字符激活的,像这样:

SELECT COUNT( * )
  FROM ekpo 
  WHERE @lv_matnr = ekpo~matnr
  INTO @lv_count .

注意:如果在右侧使用列名,则需要 "table alias" (ekpo~matnr) 并且在严格模式下,INTO 子句将位于末尾(使用 ABAP 测试7.52)