Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ABAP CDS聚合字段根据条件使用SUM或MIN_Abap_Opensql_Cds - Fatal编程技术网

ABAP CDS聚合字段根据条件使用SUM或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

我想知道如果一个字段有一个特定的值,是否可以求和,否则只取MIN(聚合记录的一个值)

我尝试过类似的方法,但在语法上不正确,因此我正在寻找一种替代方法来实现这一点:

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谢谢,我添加了输入/输出示例。