是否可以在WHERE子句中使用IF语句,根据不同的IF值使用INTO语句?
Is it possible to use IF statement in WHERE clause and use INTO statement according to different IF values?
有什么方法可以在 WHERE 子句中使用 IF 之类的东西将这 2 个 SELECT 作为一个 SELECT 获取吗?并且会像这样使用 1 select 而不是 2
任何运行时差异?我在 SAP-ABAP 上使用 OpenSQL。提供代码会很有帮助。 TY.
编辑:我刚刚意识到我不是很清楚,我还想根据 IF 语句的结果将数据放入不同的参数中。例如,如果 y = a 则 INTO lv_xa。如果 y = b 则进入 lv_xb.
SELECT SINGLE x
FROM table
WHERE y = a
INTO lv_xa.
SELECT SINGLE x
FROM table
WHERE y = b
INTO lv_xb.
我猜你需要一个简单的 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
与 ABAP 执行相比,最长的 运行 时间来自数据库 SQL 查询,您可以使用一个 SELECT 和一个包含所有条件的 WHERE,并将这些行放入内部 table,您将通过 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.
请注意,如果未找到该行,table 表达式可能会停止程序的执行,因此我让您阅读上面链接的文档以找到避免它的更好方法。
有什么方法可以在 WHERE 子句中使用 IF 之类的东西将这 2 个 SELECT 作为一个 SELECT 获取吗?并且会像这样使用 1 select 而不是 2 任何运行时差异?我在 SAP-ABAP 上使用 OpenSQL。提供代码会很有帮助。 TY.
编辑:我刚刚意识到我不是很清楚,我还想根据 IF 语句的结果将数据放入不同的参数中。例如,如果 y = a 则 INTO lv_xa。如果 y = b 则进入 lv_xb.
SELECT SINGLE x
FROM table
WHERE y = a
INTO lv_xa.
SELECT SINGLE x
FROM table
WHERE y = b
INTO lv_xb.
我猜你需要一个简单的 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
与 ABAP 执行相比,最长的 运行 时间来自数据库 SQL 查询,您可以使用一个 SELECT 和一个包含所有条件的 WHERE,并将这些行放入内部 table,您将通过 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.
请注意,如果未找到该行,table 表达式可能会停止程序的执行,因此我让您阅读上面链接的文档以找到避免它的更好方法。