sap abap 动态sql
在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 可以解决你的问题呀,inner join 和 FOR ALL ENTRIES IN在两表能连接的情况下是相同的。你的问题是不是就是
select f1 from A
inner Join B(AB连接的条件)
where (B中的字段 = J) and (A中的VBELN= xxx)。
如果不满足 B中的字段 = J,就筛选出去不要。就这样呗。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 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) .
if sy-subrc = 0."选取的值不为空时,执行下面的操作
XX = XX.
endif.LIPS是交货单 VBFA是销售凭证流
不知道你是什么逻辑 需要根据VBFA中是否有记录才取LIPS中交货单
你所说的VBFA 里面有才取LIPS 是可以用楼上所说的inner join的
join之后 如果VBFA不存在那行记录 join之后是没有数据的,但是可能出现重复行,可以删掉
另外,你也可以查询出来之后,然后判断是否存在VBFA中 不存在则删除
哎哎哎 就说这么些吧 搞不懂你究竟想写什么
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 可以解决你的问题呀,inner join 和 FOR ALL ENTRIES IN在两表能连接的情况下是相同的。你的问题是不是就是
select f1 from A
inner Join B(AB连接的条件)
where (B中的字段 = J) and (A中的VBELN= xxx)。
如果不满足 B中的字段 = J,就筛选出去不要。就这样呗。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 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) .
if sy-subrc = 0."选取的值不为空时,执行下面的操作
XX = XX.
endif.LIPS是交货单 VBFA是销售凭证流
不知道你是什么逻辑 需要根据VBFA中是否有记录才取LIPS中交货单
你所说的VBFA 里面有才取LIPS 是可以用楼上所说的inner join的
join之后 如果VBFA不存在那行记录 join之后是没有数据的,但是可能出现重复行,可以删掉
另外,你也可以查询出来之后,然后判断是否存在VBFA中 不存在则删除
哎哎哎 就说这么些吧 搞不懂你究竟想写什么