簡體   English   中英

根據 ABAP Open SQL 中的列值僅從數據庫表中選擇一行

[英]Select only one row from a DB Table depending on a column value in ABAP Open SQL

我正在尋找一種解決方案,在該解決方案中,我只想根據像標志一樣的列從數據庫表中選擇一行。

示例數據庫表如下所示:

C1 | C2 | C3
-----------------
A1 | N1 | 

A1 | N2 | X

A1 | N3 |

A2 | N21 | X

A2 | N22 |

其中 C1 和 C2 是關鍵字段。 在此示例中,A1 有 3 個條目,其中一個具有標志 true ('X')。

我想選擇標志 = 'X' 的條目或 C2 值的最小值。

這在 ABAP Open SQL 中可能嗎? 我嘗試使用 case 語句,但沒有給我所需的結果。

編輯 1:

在上面的例子中:結果將是

A1 | 氮氣

A2 | N21

當標志為假或空時:

A1 | N1

A2 | N21

當然這是可能的。 事實上,它不應該與標准 SQL 有太大區別。

SELECT *
  FROM <your_table>
  WHERE
    c3 = 'X'
    OR
    NOT EXISTS ( SELECT * FROM <your_table> WHERE c3 = 'X' ) 
      AND ( c2 = ( SELECT MIN( c2 ) FROM <your_table> ) )
  INTO TABLE @DATA(lt_your_table).

這是使用表T000完成的示例報告。

REPORT yyy.

SELECT *
  FROM t000
  WHERE
    mandt = '101'
    OR
    mandt = ( SELECT MIN( mandt ) FROM t000 )
      AND NOT EXISTS ( SELECT * FROM t000 WHERE mandt = '101' )
  INTO TABLE @DATA(lt_your_table).

LOOP AT lt_your_table ASSIGNING FIELD-SYMBOL(<fs_your_table>).
  WRITE <fs_your_table>-mandt.
ENDLOOP.

編輯:在您發表評論后,查詢可能如下所示。

SELECT mandt, cccoractiv
  FROM t000
  WHERE
    cccopylock = 'X'
UNION
SELECT mandt, MIN( cccoractiv ) AS cccoractiv
  FROM t000
  WHERE
    cccopylock <> 'X'
      AND NOT EXISTS ( SELECT * FROM t000 WHERE cccopylock = 'X' )
    GROUP BY mandt
INTO TABLE @DATA(lt_your_table).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM