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