2016-12-04 37 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總是在最前面。在表格中退出命令停止循環(我們不能使用select by order by)。你可以刪除*並添加你想要的。你也需要MATNR過濾器。 – mkysoft

+1

這裏有什麼需要「SELECT ... ENDSELECT」?它完全可以用'SELECT SINGLE'來編寫。# – Suncatcher

1

我個人不推薦使用SELECT...EXIT ENDSELECT.,在這種情況下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語句中缺少。

+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).