我试图从子查询匹配变量的表中检索行。但是,似乎WHERE子句只允许我将所选表的字段与常量、变量或子查询进行比较。
我希望写这样的东西:
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中,这是完全可能的:
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并完成它。
发布于 2015-02-23 15:00:41
下面的程序可能会引导您找到Open解决方案。它使用SAP演示表来确定在特定航班数上使用的平面类型。
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读取字段时,它才能工作。如果你这样做了,你将不得不收集这些与其他选择,同时循环你的结果。
发布于 2020-04-10 14:48:12
对于那些在2020年发现这个问题的人,我报告说,自ABAP7.50以来,这一结构得到了支持。不需要任何解决办法:
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份销售订单的所有客户。
发布于 2015-02-20 23:13:58
在ABAP中,无法像本机SQL那样执行查询。我建议不要使用本机SQL,而是尝试选择/ENDSELECT语句。
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的行。
希望能帮上忙。
https://stackoverflow.com/questions/28601726
复制相似问题