1

我想在我的 CDS 视图中创建一个新字段,其 CASE 条件如下

case  
  when usage  = 0 then '1'
  when usage < '10' or usage_6m > '0' then '2'
  when usage < '250' or usage_6m > '10' then '3'
  else '0'
end as usage

问题是字段“usage”NUMC10的类型是,所以eclipse抛出错误:“数据类型冲突”。所以我想将该字段转换为 abap.int4,但这不起作用,因为不支持 CAST-- 表达式:

case 
        when cast( usage  as abap.int4 )  = 0 then '1'
...

专家请告知我该如何解决这个问题,为什么我不能在 CASE 表达式中转换字段。

问候,
奥马尔·阿卜杜拉

4

2 回答 2

2

您也可以直接比较 NUMC 值。帮助文章“ABAP CDS - cond_expr, Comparable Types”说,如果字段和文字具有完全相同的长度,则可以使用关系运算符 >、< 等将 NUMC 与其他 NUMC 文字进行比较。

这意味着您需要将 NUMC(10) 更改为:

case  
  when usage = '0000000000' then '1'
  when usage < '0000000010' or usage_6m > '0' then '2'
  when usage < '0000000250' or usage_6m > '10' then '3'
  else '0'
end as usage
于 2018-10-30T13:37:55.627 回答
0

在下面构建第二个 CDS 视图:

define view <lower_view> as select from <table> {
    cast( usage as abap.int4 ) as usage;
    cast( usage_6m as abap.int4 ) as usage_6m;
}

define view <upper_view> as select from <lower_view> {
    case 
        when usage = 0 then '1'
        when usage < 10 or usage_6m > 0 then '2'
        when usage < 250 or usage_6m > 10 then '3'
        else '0'
    end as usage 
}

usage是保留字。编译器将拒绝命名这样的列。

于 2018-10-30T13:30:55.423 回答