编译器错误 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)
我制作了一个 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)