SAP ABAP 里使用select 筛选条件里 在另一个表里查找结果为真或假的怎么写? 不好意思,没什么分。

2024-11-05 01:37:57
推荐回答(5个)
回答1:

ABAP有它自己独特的取数方法与逻辑, 和我们用SQL语句直接查询不同, 这个思维要转换过来! !

第一步: 到出作为筛选条件的数据放入内表:
SELECT vbeln
FROM vbfa
INTO TABLE gt_vbfa
WHERE vbtyp_n = 'J' .

第二步: 用FOR ALL ENTRIES IN 前要先判断是否为空
IF gt_vbfa IS NOT INITIAL .
SELECT matnr lfimg vrkme
FROM lips

INTO gt_lips
FOR ALL ENTRIES IN gt_vbfa
WHERE vbeln = gt_vbfa-vbeln
AND vbelv = gt_vbfa-vbelv

AND posnv = gt_vbfa-posnr .
ENDIF .

第三步: 使用内表里面的数据
LOOP AT gt_lips INTO gwa_lips
......

ENDLOOP .

备注:ABAP 还有很多规范及性能上的要求, 总之数据是SAP系统整个业务的核心, 不是简单的增,删, 改, 查!

希望这简单的回答能对你有所帮助!

回答2:

LIPS是交货单 VBFA是销售凭证流

不知道你是什么逻辑 需要根据VBFA中是否有记录才取LIPS中交货单

你所说的VBFA 里面有才取LIPS 是可以用楼上所说的inner join的

join之后 如果VBFA不存在那行记录 join之后是没有数据的,但是可能出现重复行,可以删掉

另外,你也可以查询出来之后,然后判断是否存在VBFA中 不存在则删除

哎哎哎 就说这么些吧 搞不懂你究竟想写什么

回答3:

在ABAP中,SQL语句有自己的特殊性,你的需求应该是联表查询吧,按照你的要求应该类似这样

select a~MATNR a~LFIMG VRKME into (ITAB-MATNR,ITAB-LFIMG )
from LIPS AS a
INNER JOIN VBFA AS b
ON a~连接字段1 = b~连接字段1 and a~连接字段2 = b~连接字段2…… (两个表的关联字段)
WHERE 条件

该语法应该可以解决你的问题

回答4:

inner join 可以解决你的问题呀,inner join 和 FOR ALL ENTRIES IN在两表能连接的情况下是相同的。你的问题是不是就是
select f1 from A
inner Join B(AB连接的条件)

where (B中的字段 = J) and (A中的VBELN= xxx)。
如果不满足 B中的字段 = J,就筛选出去不要。就这样呗。

回答5:

楼主的意思似乎是 itab1作为条件,查看vbfa的下一个活动是否是lips中的记录,有的话就去lips中查.
你想要的真假判断我也不知.
但给个思路:
用for all entries in itab1 从vbfa中得到满足条件的数据放入新的内表itab2
让后for all enti in itab2去查询lips的数据
个人认为这个应该能达到你的目的,而且效率应该还算不错.