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

比如selectMATNRLFIMGVRKMEinto(ITAB-MATNR,ITAB-LFIMG)fromLIPSwhereVBELNin(selectVBELNfro... 比如
select MATNR LFIMG VRKME into (ITAB-MATNR,ITAB-LFIMG )
from LIPS
where VBELN in ( select VBELN from VBFA where VBELV eq ITAB1-VBELN
and POSNV eq ITAB1-POSNR and VBTYP_N = 'J') .
实际上我就是想取在VBFA里能找到订单号的就取LIPS里的数据。
select MATNR LFIMG VRKME into (ITAB-MATNR,ITAB-LFIMG )
from LIPS
where VBELN = ITAB1-VBELN and ( select VBELN from VBFA where VBELV eq ITAB1-VBELN
and POSNV eq ITAB1-POSNR and VBTYP_N = 'J') = ture.
展开
 我来答
vigoryu
2012-11-13 · TA获得超过142个赞
知道答主
回答量:49
采纳率:0%
帮助的人:37.8万
展开全部
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系统整个业务的核心, 不是简单的增,删, 改, 查!

希望这简单的回答能对你有所帮助!
静水逐花
2012-11-13 · TA获得超过1032个赞
知道小有建树答主
回答量:733
采纳率:0%
帮助的人:482万
展开全部
LIPS是交货单 VBFA是销售凭证流

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

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

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

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

哎哎哎 就说这么些吧 搞不懂你究竟想写什么
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nature0106
推荐于2017-09-29 · TA获得超过502个赞
知道小有建树答主
回答量:288
采纳率:0%
帮助的人:196万
展开全部
在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 条件

该语法应该可以解决你的问题
追问
不是INNER JOIN,
我的意思是我在A表里查数据,但有一个条件是某字段在B表中有对应记录的才取A表的值,没有就跳过。
就是说在SELECT里的其中的一个条件是 查询B表返回值为真。
追答
那就用FOR ALL ENTRIES IN 选项
将B表中关联字段筛选到内表itab_B中(注意去重,ITAB_B最好参照结构,语法中要引用字段),假设该字段为B,而对应A表字段中为B2
SELECT 字段
INTO ITAB_A
FROM A
FOR ALL ENTRIES IN ITAB_B
WHERE B2 = ITAB_B-B
这样的话,就是说B2的值在内表ITAB_B中时,才会选择A表中对应的数据

不知道这个可以不,试试吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友18d39f2
2017-09-28
知道答主
回答量:7
采纳率:0%
帮助的人:5968
展开全部
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,就筛选出去不要。就这样呗。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lubin58246
2012-11-17
知道答主
回答量:16
采纳率:0%
帮助的人:10.2万
展开全部
楼主的意思似乎是 itab1作为条件,查看vbfa的下一个活动是否是lips中的记录,有的话就去lips中查.
你想要的真假判断我也不知.
但给个思路:
用for all entries in itab1 从vbfa中得到满足条件的数据放入新的内表itab2
让后for all enti in itab2去查询lips的数据
个人认为这个应该能达到你的目的,而且效率应该还算不错.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式