我可以在OpenSQL中比较表的列吗?
当前代码如下:
SELECT SINGLE menge wemng ebeln ebelp
INTO (eket-menge,
eket-wemng,
eket-ebeln,
eket-ebelp)
FROM eket
WHERE ebeln = ekpo-ebeln
AND ebelp = ekpo-ebelp.
IF eket-menge NE eket-wemng.
我想避免退回menge = wemng
处的行,但这行不通:
SELECT menge wemng ebeln ebelp
INTO (eket-menge,
eket-wemng,
eket-ebeln,
eket-ebelp)
FROM eket
WHERE ebeln = ekpo-ebeln
AND ebelp = ekpo-ebelp
AND menge <> wemng.
ABAP认为wemng
应该是变量。
我该怎么办?
答案 0 :(得分:2)
请检查以下查询:
SELECT menge wemng ebeln ebelp
INTO (eket-menge,
eket-wemng,
eket-ebeln,
eket-ebelp)
FROM eket
WHERE ebeln = ekpo-ebeln
AND ebelp = ekpo-ebelp
AND menge <> eket~wemng.
但是这时您会收到错误消息:
错误的嵌套:在语句“ ENDIF”之前,“ SELECT”引入的控制结构必须以“ ENDSELECT”结束。
因此,您应该创建一些内部表来处理此问题
SELECT menge wemng ebeln ebelp
INTO TABLE lt_eket
FROM eket
WHERE ebeln = ekpo-ebeln
AND ebelp = ekpo-ebelp
AND menge <> eket~wemng.
或使用SELECT SINGLE
SELECT SINGLE menge wemng ebeln ebelp
INTO (eket-menge,
eket-wemng,
eket-ebeln,
eket-ebelp)
FROM eket
WHERE ebeln = ekpo-ebeln
AND ebelp = ekpo-ebelp
AND menge <> eket~wemng.
答案 1 :(得分:2)
在WHERE条件下比较两列时,应使用列选择器(〜)。这是设计使然。
ABAPDOCU说:
列选择器
字符〜。数据库表(dbtab)的列(col)可以是 通过dbtab〜col在SELECT语句中寻址。这类 如果访问多个数据库表,则必须进行寻址 列的名称出现在许多不同的数据库表中 或如果在比较中将两列相互比较 位置情况。
所以,就您而言:
SELECT menge wemng ebeln ebelp
INTO (eket-menge,
eket-wemng,
eket-ebeln,
eket-ebelp)
FROM eket
WHERE ebeln = ekpo-ebeln
AND ebelp = ekpo-ebelp
AND menge <> eket~wemng.
...