2016-12-04 7 views
0

これを行う方法を教えてください: テーブルMAKTがあります。私はMAKTXをフランス語(SPRAS = 'FR')にしましたが、フランス語がここにない場合は、MAKTXを英語で表示する必要があります。どのように正しく行うには?SAP ABAP特殊条件を使用してクエリを作成する方法

IF MAKT-SPRAS='FR'. 
    SELECT SINGLE MAKT-MAKTX FROM MAKT WHERE SPRAS='FR'. 
ELSE. 
    SELECT SINGLE MAKT-MAKTX FROM MAKT WHERE SPRAS='EN'. 
ENDIF. 
+0

このような状況では、マテリアルテーブルの説明を取得しない単一の説明を探していますが、正しいですか? – Brian

答えて

2

で注文できます。

select * from MAKT where SPRAS = 'FR' or SPRAS = 'EN' order by SPRAS descending. 
    exit. 
endselect. 
+0

ありがとう、Mkysoft!この場合、情報はすべて一列に表示されます。そしてそれは「FR」だけ必要です。 'FR'がない場合は、 'EN'のみ。それを行う方法? – Callisto

+0

@Callistoは言語ごとにすべての翻訳順序を取得するクエリです。だからFRは常にそこにいるなら上にある。 exit command stop loop in table(order byでselect singleを使用することはできません)。あなたは*を取り除き、あなたが望むものを追加することができます。また、私は思うMATNRフィルタが必要です。 – mkysoft

+1

ここでは 'SELECT ... ENDSELECT'の必要性は何ですか? 'SELECT SINGLE'で完璧に書けます – Suncatcher

1

私は個人的にこのケースでORDER BYSELECT...EXIT ENDSELECT.の使用はお勧めしません!ここで

は、はるかに簡潔であり、あなたがデータベースに何をしたいのかを完全に制御できます方法です。

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ステートメントには欠けていた。

+0

私はこれを上記の方法よりも優れたアプローチと考えていますが、' SELECT SINGLE * FROM makt INTO ls_makt'ここで 'ls_makt'は' MAKT'テーブルの行として定義されています。私はこれがそれを活性化するかどうかはわかりません。 – gkubed

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). 
関連する問題