首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenSQL中变量=(子查询)

在OpenSQL中变量=(子查询)
EN

Stack Overflow用户
提问于 2015-02-19 08:37:16
回答 3查看 5.3K关注 0票数 4

我试图从子查询匹配变量的表中检索行。但是,似乎WHERE子句只允许我将所选表的字段与常量、变量或子查询进行比较。

我希望写这样的东西:

代码语言:javascript
复制
DATA(lv_expected_lines) = 5.
SELECT partner contract_account
INTO TABLE lt_bp_ca
FROM table1 AS tab1
WHERE lv_expected_lines = (
    SELECT COUNT(*)
    FROM table2
    WHERE partner          = tab1~partner
    AND   contract_account = tab1~contract_account ).

但是很明显,此选择将我的局部变量视为字段名,并且它给出了错误“未知列名”"lv_expected_lines“,直到运行时,您才能指定字段列表。

但是在标准SQL中,这是完全可能的:

代码语言:javascript
复制
SELECT PARTNER, CONTRACT_ACCOUNT
FROM TABLE1 AS TAB1
WHERE 5 = (
    SELECT COUNT(*)
    FROM TABLE2
    WHERE PARTNER          = TAB1.PARTNER
    AND   CONTRACT_ACCOUNT = TAB1.CONTRACT_ACCOUNT );

,那么我如何在RSQL / Open中复制这个逻辑呢?

如果没有办法,我可能只编写原生SQL并完成它。

EN

回答 3

Stack Overflow用户

发布于 2015-02-23 15:00:41

下面的程序可能会引导您找到Open解决方案。它使用SAP演示表来确定在特定航班数上使用的平面类型。

代码语言:javascript
复制
REPORT zgertest_sub_query.

DATA: lt_planetypes TYPE STANDARD TABLE OF s_planetpp.

PARAMETERS: p_numf TYPE i DEFAULT 62.

START-OF-SELECTION.

  SELECT planetype
         INTO TABLE lt_planetypes
         FROM  sflight
       GROUP BY planetype
       HAVING COUNT( * ) EQ p_numf.

  LOOP AT lt_planetypes INTO DATA(planetype).
    WRITE: / planetype.
  ENDLOOP.

只有当您不需要从TAB1读取字段时,它才能工作。如果你这样做了,你将不得不收集这些与其他选择,同时循环你的结果。

票数 2
EN

Stack Overflow用户

发布于 2020-04-10 14:48:12

对于那些在2020年发现这个问题的人,我报告说,自ABAP7.50以来,这一结构得到了支持。不需要任何解决办法:

代码语言:javascript
复制
SELECT kunnr, vkorg
FROM vbak AS v
WHERE 5 = ( SELECT COUNT(*)
              FROM vbap
             WHERE kunnr = v~kunnr
               AND vkorg = v~vkorg )
 INTO TABLE @DATA(customers).

这将选择在某些销售组织内发出5份销售订单的所有客户。

票数 1
EN

Stack Overflow用户

发布于 2015-02-20 23:13:58

在ABAP中,无法像本机SQL那样执行查询。我建议不要使用本机SQL,而是尝试选择/ENDSELECT语句。

代码语言:javascript
复制
DATA: ls_table1 type table1,
      lt_table1 type table of table1,
      lv_count  type i.

SELECT PARTNER, CONTRACT_ACCOUNT
INTO ls_table1
FROM TABLE1.

      SELECT COUNT(*)
        INTO lv_count
        FROM TABLE2
       WHERE PARTNER          = TAB1.PARTNER
        AND  CONTRACT_ACCOUNT = TAB1.CONTRACT_ACCOUNT.

  CHECK lv_count EQ 5.
  APPEND ls_table1 TO lt_table1.

ENDSELECT

在这里,您只向ls_table1附加那些在选择table2时计数等于5的行。

希望能帮上忙。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28601726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档