代码之家  ›  专栏  ›  技术社区  ›  Umar Abdullah

ABAP CDS View Cast in Case Expression抛出错误

  •  0
  • Umar Abdullah  · 技术社区  · 7 年前

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

    请专家指教我该如何解决这个问题,为什么我不能把一个领域内的一个案例表达。

    当做,
    阿卜杜拉

    2 回复  |  直到 5 年前
        1
  •  2
  •   Florian    7 年前

    也可以直接比较NUMC值。帮助文章“abapcds-cond\u 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
    
        2
  •  0
  •   Florian    7 年前

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

    推荐文章