ABAP CDS 笔记

文章目录

  • 1.什么是abap cds
    • adap cds的优点
  • 2.常用cds语法
    • 常用函数
    • 一 数值函数
      • 1.绝对值
      • 2. 最小整数不小于arg的值
      • 3.两个参数相除
      • 4.两个数相除切保留小数位
      • 5.最小整数不大于arg的值
      • 6.取除数的余数
    • 二 字符串函数
      • 1.拼接字符
      • 2.替换字符
      • 3.截取字符串
    • 三 常用的分支语句
      • 1.CASE 表达式
      • 2.IF 表达式
  • 3.cds 语法演示
    • 1.汇总
    • 2.字符串截取
    • 3.CASE 语句
    • 4.case / coalesce()
    • 5.除法计算
    • 7.添加过滤条件

1.什么是abap cds

ABAP CDS(Core Data Services)是一种数据建模语言,用于定义和管理数据模型和服务。它提供了一种简单而强大的方式来定义数据结构、关联和业务逻辑,并且可以与数据库无缝集成。ABAP CDS可以用于创建适用于SAP HANA数据库的数据模型,也可以用于创建适用于SAP S/4HANA和其他SAP应用程序的数据服务。它还可以与ABAP程序和其他SAP技术进行集成,为开发人员提供了更多的灵活性和功能。ABAP CDS是SAP的一种推荐的数据建模和服务定义语言,被广泛应用于SAP系统和应用程序的开发中。(来自gpt-3.5)

adap cds的优点

1.可以利用DDIC语义进行高级数据模型定义;
2.内置了各种SQL函数和表达式进行数据的处理;
3.cds表函数利用本地 SAP hana特性和功能;

2.常用cds语法

常用函数

Aggregation Functions: SUM, AVG, MIN, MAX, COUNT 等用于对数据进行聚合计算的函数。

String Functions: CONCAT, SUBSTRING, REPLACE, TRANSLATE 等用于处理字符串的函数。

Date and Time Functions: CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP 等用于处理日期和时间的函数。

Mathematical Functions: ROUND, CEIL, FLOOR, ABS 等用于数学运算的函数。

Conditional Functions: CASE, COALESCE, NULLIF 等用于条件判断的函数。

一 数值函数

1.绝对值

ABS(arg1)

2. 最小整数不小于arg的值

CEIL(arg1)

3.两个参数相除

arg1 除以 arg2 的整数部分 在金额除以后分配符号;如果参数具有相同的符号,则为正数,如果参数具有不同的符号,则为负数。异常:arg2 的值为 0。

DIV(arg1,arg2)

4.两个数相除切保留小数位

arg1/arg2 保留 dec位小数;相除的结果是四舍五入的 ,dec必须是是int类型的

DIVISION(arg1, arg2, dec)

5.最小整数不大于arg的值

FLOOR(arg)

6.取除数的余数

arg1/arg2 的余数

例如 10 / 4 = 2.5

MOD(arg1, arg2)

mod(10 , 4) = 5

二 字符串函数

1.拼接字符

CONCAT(arg1, arg2)

2.替换字符

字符串 arg1,其中 arg2 的所有实例都替换为 arg3 中的内容。字母的替换区分大小写。

REPLACE(arg1, arg2, arg3)

例如:
	arg1 = 'abcd1234'.
	arg2 = 'cd'.
	arg3 = '00'
REPLACE(arg1, arg2, arg3) = 'ab001234'	

3.截取字符串

截取arg字符串从pos开始取len个字符

SUBSTRING(arg, pos, len)

例如:
	arg = '1234567890'.
	
SUBSTRING(arg, 2, 5) = '23456' .	

在使用函数或分支语句的时候 需要给 他一个别名

三 常用的分支语句

1.CASE 表达式

类似于SQL中的CASE语句,可以根据不同条件执行不同的逻辑。

写法一:
CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ELSE result3
END.
写法2:
CASE arg
  WHEN 'A' THEN result1
  WHEN 'B'  THEN result2
  ELSE result3
END.

2.IF 表达式

用于执行简单的条件判断。

IF condition.
  statement1.
ELSE.
  statement2.
END.

3.cds 语法演示

1.汇总

sum(_m.stock_qty) as menge

2.字符串截取

取a.prodh 从 第一个字符到 第五字符的值

a.prodh = 'abcdefg123456'
substring(a.prodh,1,5) as prodh2

结果:
prodh2 = 'abcef'

3.CASE 语句

  case _ekko.bsart
  when 'Z006' then _ekpo.menge * -1 
  when 'Z008' then _ekpo.menge * -1 
  else _ekpo.menge  
  end as emenge,

4.case / coalesce()

如果为z006/z008 menge * -1 - p.menge

否则 menge - p.menge

  case when _ekko.bsart = 'Z006' or _ekko.bsart = 'Z008' 
  then  coalesce(_ekpo.menge * -1,0) - coalesce(_ekbe.menge,0)
  else  coalesce( _ekpo.menge,0) - coalesce(_ekbe.menge,0)  
  end as menge_diff 

5.除法计算

division(A,B,3) : A / B 保留三位小数

division(_d.labst ,_mr.umrez,3) * _mr.umren
  1. 复核处理case/division/coalesce
 case when _ekko.bsart = 'Z006' or _ekko.bsart = 'Z008' 
  then  
    division( coalesce(_ekpo.menge * -1,0) - coalesce(_ekbe.menge,0) ,_marm.umren ,3) *  _marm.umrez 
  else   
  division( coalesce( _ekpo.menge,0) - coalesce(_ekbe.menge,0) ,_marm.umren,3) *  _marm.umrez  
  end as menge_tran 

7.添加过滤条件

define view zbv_stka_eb_ddl 
    with parameters "条件
    p_date : datum 
    as select from matdoc as _m
    inner join ZBV_MARA_CO as _a on _a.matnr = _m.matnr
{
    _m.werks,
    substring(_a.prodh,1,5) as prodh2,
    sum(_m.stock_qty) as menge
}where _m.budat <= $parameters.p_date "条件
group by
    _m.werks,
having 
    sum(_m.stock_qty) <> 0  

你可能感兴趣的:(SAP,CDS,数据库,adap,cds,adap,cds,SAP)