【问题标题】:Is it possible to use IF statement in WHERE clause and use INTO statement according to different IF values?是否可以在 WHERE 子句中使用 IF 语句并根据不同的 IF 值使用 INTO 语句?
【发布时间】:2020-01-08 09:52:40
【问题描述】:

有没有什么方法可以在 WHERE 子句中使用 IF 之类的东西将这 2 个 SELECT 作为一个 SELECT?并且会像这样使用 1 选择而不是 2 任何运行时差异?我在 SAP-ABAP 上使用 OpenSQL。提供代码会很有帮助。泰。

编辑:我刚刚意识到我不是很清楚,我还想根据 IF 语句的结果将数据转换为不同的参数。例如,如果 y = a 则 INTO lv_xa。如果 y = b 然后 INTO lv_xb。

SELECT SINGLE x
FROM table
WHERE y = a
INTO lv_xa.

SELECT SINGLE x
FROM table
WHERE y = b
INTO lv_xb.

【问题讨论】:

    标签: sql if-statement select where-clause opensql


    【解决方案1】:

    我猜你需要一个简单的 CASE 语句 -

    SELECT CASE WHEN y = a THEN x END, CASE WHEN y = b THEN x END
    FROM table
    WHERE y IN (a, b)
    INTO lv_xa, lv_xb
    

    【讨论】:

      【解决方案2】:

      由于与 ABAP 执行相比,最长的运行时间来自于数据库 SQL 查询,因此您可以在所有条件下使用一个带有 WHERE 的 SELECT,并将这些行放入一个内部表中,然后您将通过 ABAP 获取您想要的行table expression(下:result[ y = a ])。

      DATA result TYPE SORTED TABLE OF table WITH NON-UNIQUE KEY y.
      
      SELECT y x
        FROM table
        WHERE y IN (a,b)
        INTO TABLE result.
      
      lv_xa = result[ y = a ]-x.
      lv_xb = result[ y = b ]-x.
      

      请注意,如果找不到该行,表表达式可能会停止程序的执行,因此我让您阅读上面链接的文档以找出避免它的更好方法。

      【讨论】:

      • 这似乎是最接近的一个。我没想到只需一次选择就可以完成它,但是一个人可以希望是对的 :) Ty 为您的回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 2021-07-17
      相关资源
      最近更新 更多