0

请告诉我该怎么做:有一张桌子 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.
4

3 回答 3

2

您可以通过订购获得。

select * from MAKT where SPRAS = 'FR' or SPRAS = 'EN' order by SPRAS descending.
  exit.
endselect.
于 2016-12-04T15:45:15.577 回答
1

我个人不建议在这种情况下使用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 语句中丢失了。

于 2016-12-14T15:55:54.697 回答
0

您可以像这样在 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).
于 2016-12-16T12:45:19.447 回答