不支持在 CASE 内铸造列

Casting column inside CASE is not supported

我想在我的 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 会抛出错误:"data type conflict"。所以我想将该字段转换为 abap.int4,但是这不起作用,因为不支持 CAST--expression:

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

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

问候,
奥马尔·阿卜杜拉

在下方构建第二个 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 是保留字。编译器将拒绝这样命名列。

您也可以直接比较 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