gpt4 book ai didi

sql - 根据 ABAP Open SQL 中的列值,从数据库表中仅选择一行

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:22 25 4
gpt4 key购买 nike

我正在寻找一种解决方案,在该解决方案中,我只想根据类似于标志的列从数据库表中选择一行。

示例数据库表如下所示:

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

A1 | N2 | X

A1 | N3 |

A2 | N21 | X

A2 | N22 |

其中 C1 和 C2 是关键字段。在这个例子中,A1 有 3 个条目,其中一个有一个标志为真('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).

关于sql - 根据 ABAP Open SQL 中的列值,从数据库表中仅选择一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46561695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com