不支持CASE中的铸造列

问题描述 投票:1回答:2

我想在我的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

问题在于,NUMC10字段的类型为“使用情况”,因此eclipse引发错误:“数据类型冲突”。因此,我想将字段强制转换为abap.int4,但这无法正常工作,因为不支持CAST--表达式:

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

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

问候,乌玛尔·阿卜杜拉

casting sap abap cds
2个回答
2
投票

您还可以直接比较NUMC值。帮助文章“ ABAP CDS-cond_expr,可比较类型”说,如果字段和文字的长度完全相同,则可以使用关系运算符>,

意味着您需要将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

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是保留字。编译器将拒绝为这样的列命名。

© www.soinside.com 2019 - 2024. All rights reserved.