ABAP CDS聚合字段根据条件使用SUM或MIN
我想知道如果一个字段有一个特定的值,是否可以求和,否则只取MIN(聚合记录的一个值) 我尝试过类似的方法,但在语法上不正确,因此我正在寻找一种替代方法来实现这一点:ABAP CDS聚合字段根据条件使用SUM或MIN,abap,opensql,cds,Abap,Opensql,Cds,我想知道如果一个字段有一个特定的值,是否可以求和,否则只取MIN(聚合记录的一个值) 我尝试过类似的方法,但在语法上不正确,因此我正在寻找一种替代方法来实现这一点: SELECT FROM ZCDS FIELDS ZCDS~networkID as networkID, ZCDS~assignment as assignment, CASE WHEN ZCDS~assignment = 'N' THEN MIN( ZCDS~amo
SELECT FROM ZCDS
FIELDS ZCDS~networkID as networkID,
ZCDS~assignment as assignment,
CASE
WHEN ZCDS~assignment = 'N'
THEN MIN( ZCDS~amount )
ELSE SUM( ZCDS~amount )
END as amount
GROUP BY ZCDS~networkID, ZCDS~assignment
INTO TABLE @DATA(result).
也许有一种方法可以确定总和是否已经不是0,然后使用案例停止添加更多金额。但我不知道在某种情况下如何获取和的中间值,可能也不可能
预期投入:
+----+-----------+------------+--------+
| ID | NetworkID | Assignment | Amount |
+----+-----------+------------+--------+
| 1 | D/01 | N | 7 |
| 2 | D/01 | N | 5 |
| 3 | D/01 | U | 15 |
| 4 | D/01 | U | 11 |
| 5 | D/02 | N | 40 |
| 6 | D/02 | N | 42 |
+----+-----------+------------+--------+
预期产出:
+-----------+------------+--------+
| NetworkID | Assignment | Amount |
+-----------+------------+--------+
| D/01 | N | 5 |
| D/01 | U | 26 |
| D/02 | N | 40 |
+-----------+------------+--------+
当然有办法。在
分组后使用具有总和(ZDS~amount)
SELECT FROM ZCDS
FIELDS ZCDS~ID as ID,
ZCDS~assignment as assignment,
CASE
WHEN ZCDS~assignment = 'N'
THEN MIN( ZCDS~amount )
ELSE SUM( ZCDS~amount )
END as amount
GROUP BY ZCDS~ID, ZCDS~assignment
HAVING SUM( ZCDS~amount ) = 0
INTO TABLE @DATA(result).
当你把单词CD放到问题标题中时,我向你推荐CD解决方案。我重新创建了您的表结构,可以确认此代码至少在ABAP7.50上有效
@AbapCatalog.sqlViewName: 'zsql_assign'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'assignment'
define view ZCDS_ASSIGN as select from zfilter {
key networkid,
key assignment,
case assignment when 'U' then sum( amount )
else min( amount )
end as amount
} group by networkid, assignment;
此查询的输出:
在经典的ABAP(OpenSQL)中,这仍然是不可能的 我的示例有一个预期的语法错误,据我所知,不能在案例中使用MIN和MAX。我想知道的是,是否有其他方法可以实现这一目标this@Ratio,不能在一个case中使用MIN/MAX,但可以在MIN中使用case,如下所示具有MIN(case m1~shkzg当'H'时,则为1当'S'时,则为-1,否则为0 END*m1~menge)
。这完全取决于您的需求,如果没有预期的输入/输出,我无法给smth更多建议specific@Suncatcher谢谢,我添加了输入/输出示例。