请告诉我该怎么做:有一张桌子 MAKT。我有法语的 MAKTX (SPRAS='FR'),但如果这里没有法语,则需要用英语显示 MAKTX。如何正确执行?
IF MAKT-SPRAS='FR'.
SELECT SINGLE MAKT-MAKTX FROM MAKT WHERE SPRAS='FR'.
ELSE.
SELECT SINGLE MAKT-MAKTX FROM MAKT WHERE SPRAS='EN'.
ENDIF.
您可以通过订购获得。
select * from MAKT where SPRAS = 'FR' or SPRAS = 'EN' order by SPRAS descending.
exit.
endselect.
我个人不建议在这种情况下使用SELECT...EXIT ENDSELECT.
with ORDER BY
!
这是一种更简洁的方法,可以完全控制您要对数据库执行的操作:
DATA: ls_makt TYPE makt.
SELECT SINGLE * FROM makt
INTO ls_makt
WHERE matnr EQ <your-matnr>
AND ( spras EQ 'FR'
OR ( spras EQ 'EN'
AND NOT EXISTS ( SELECT * FROM makt
WHERE matnr EQ <your-matnr>
AND spras EQ 'FR' ) ) ).
这将选择法语或英语的材料文本,但前提是法语文本不存在。
根据第一条评论编辑。你是对的,... SINGLE... 在 SELECT 语句中丢失了。
您可以像这样在 ABAP 中创建动态 where 子句。
DATA wherecond TYPE String.
IF MAKT-SPRAS='FR'.
CONCATENATE 'SPRAS = ''' FR '''' INTO wherecond.
ELSE.
CONCATENATE 'SPRAS = ''' EN '''' INTO wherecond.
ENDIF.
SELECT SINGLE MAKT-MAKTX FROM MAKT WHERE (wherecond).