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. 展开
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. 展开
6个回答
展开全部
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系统整个业务的核心, 不是简单的增,删, 改, 查!
希望这简单的回答能对你有所帮助!
第一步: 到出作为筛选条件的数据放入内表:
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系统整个业务的核心, 不是简单的增,删, 改, 查!
希望这简单的回答能对你有所帮助!
展开全部
LIPS是交货单 VBFA是销售凭证流
不知道你是什么逻辑 需要根据VBFA中是否有记录才取LIPS中交货单
你所说的VBFA 里面有才取LIPS 是可以用楼上所说的inner join的
join之后 如果VBFA不存在那行记录 join之后是没有数据的,但是可能出现重复行,可以删掉
另外,你也可以查询出来之后,然后判断是否存在VBFA中 不存在则删除
哎哎哎 就说这么些吧 搞不懂你究竟想写什么
不知道你是什么逻辑 需要根据VBFA中是否有记录才取LIPS中交货单
你所说的VBFA 里面有才取LIPS 是可以用楼上所说的inner join的
join之后 如果VBFA不存在那行记录 join之后是没有数据的,但是可能出现重复行,可以删掉
另外,你也可以查询出来之后,然后判断是否存在VBFA中 不存在则删除
哎哎哎 就说这么些吧 搞不懂你究竟想写什么
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在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 条件
该语法应该可以解决你的问题
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表中对应的数据
不知道这个可以不,试试吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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,就筛选出去不要。就这样呗。
select f1 from A
inner Join B(AB连接的条件)
where (B中的字段 = J) and (A中的VBELN= xxx)。
如果不满足 B中的字段 = J,就筛选出去不要。就这样呗。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主的意思似乎是 itab1作为条件,查看vbfa的下一个活动是否是lips中的记录,有的话就去lips中查.
你想要的真假判断我也不知.
但给个思路:
用for all entries in itab1 从vbfa中得到满足条件的数据放入新的内表itab2
让后for all enti in itab2去查询lips的数据
个人认为这个应该能达到你的目的,而且效率应该还算不错.
你想要的真假判断我也不知.
但给个思路:
用for all entries in itab1 从vbfa中得到满足条件的数据放入新的内表itab2
让后for all enti in itab2去查询lips的数据
个人认为这个应该能达到你的目的,而且效率应该还算不错.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询