OpenSQL与列之间的比较

时间:2018-09-08 21:09:15

标签: abap opensql

我可以在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应该是变量。

我该怎么办?

2 个答案:

答案 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.
...