首页 > 其他分享 >SAP CDS view 里的 COALESCE 函数

SAP CDS view 里的 COALESCE 函数

时间:2023-08-13 13:13:02浏览次数:35  
标签:NULL vbak COALESCE View CDS SAP spfli view

在 SAP ABAP CDS (Core Data Services) View 中,COALESCE 函数是用于处理 NULL 值的一种功能。COALESCE 函数接受多个参数,并返回第一个非 NULL 值参数。这意味着如果第一个参数不为 NULL,则返回第一个参数的值;如果第一个参数为 NULL,则返回第二个参数的值;以此类推,直到找到第一个非 NULL 值参数为止。如果所有参数均为 NULL,则返回 NULL。

COALESCE 函数在 CDS View 中的应用十分广泛,它可以用于处理各种复杂的数据情况,例如默认值设置、空值替换等。在本文中,我们将详细说明 COALESCE 函数在 CDS View 中的使用,并提供一些实际示例来展示其功能。

首先,我们需要了解 COALESCE 函数的语法。在 CDS View 中,COALESCE 函数的语法如下:

COALESCE( value1, value2, ..., valueN )

其中,value1、value2 等为参数,可以是字段名、常量值或表达式。CDS View 将按照参数的顺序检查它们的值,返回第一个非 NULL 值参数。如果所有参数均为 NULL,则返回 NULL。

下面我们通过几个实际示例来详细说明 COALESCE 函数在 CDS View 中的应用:

示例 1:使用 COALESCE 设置默认值

假设我们有一个 CDS View,用于展示员工的信息,其中包括员工姓名和薪水。有时候,薪水字段可能为空,我们希望在查询结果中将其显示为默认值,比如 0。

@AbapCatalog.sqlViewName: 'ZEMPLOYEES'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Employee Information'
define view ZEmployees as select from spfli
{
  key spfli.carrid,
  spfli.connid,
  spfli.cityfrom,
  spfli.cityto,
  spfli.countryfr,
  spfli.countryto,
  spfli.flighttype,
  spfli.distance,
  COALESCE(spfli.distance, 0) as distance_with_default
} 

在上述示例中,我们使用 COALESCE 函数来设置 distance_with_default 字段的默认值为 0。如果 spfli.distance 字段为空(即为 NULL),则 distance_with_default 字段将显示为 0。

示例 2:使用 COALESCE 替换 NULL 值

在某些情况下,我们希望将 NULL 值替换为其他特定的值。例如,我们有一个 CDS View,用于显示订单信息,其中包括订单号和订单创建日期。如果订单创建日期为空,我们希望在查询结果中将其替换为 "N/A"。

@AbapCatalog.sqlViewName: 'ZORDERS'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Order Information'
define view ZOrders as select from vbak
{
  key vbak.vbeln,
  vbak.erdat,
  COALESCE(vbak.erdat, 'N/A') as erdat_replaced
} 

在上述示例中,我们使用 COALESCE 函数来将 erdat 字段的 NULL 值替换为字符串 "N/A",并将结果显示在 erdat_replaced 字段中。

示例 3:使用 COALESCE 进行复杂判断

COALESCE 函数还可以用于复杂的判断逻辑,返回满足条件的第一个非 NULL 值参数。例如,我们有一个 CDS View,用于显示销售订单的信息,其中包括订单号、订单日期和订单状态。我们希望在查询结果中,如果订单状态为空,则根据订单日期判断订单状态为 "已完成" 或 "未完成"。

@AbapCatalog.sqlViewName: 'ZSALESORDERS'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Sales Order Information'
define view ZSalesOrders as select from vbak
{
  key vbak.vbeln,
  vbak.erdat,
  vbak.status,
  COALESCE(vbak.status, CASE WHEN vbak.erdat <= '20230730' THEN '已完成' ELSE '未完成' END) as status_with_default
} 

在上述示例中,我们使用 COALESCE 函数结合 CASE 表达式来实现复杂的判断逻辑。如果 vbak.status 字段为空,将根据订单日期 vbak.erdat 判断订单状态为 "已完成" 或 "未完成",并将结果显示在 status_with_default 字段中。

总结

在 SAP ABAP CDS View 中,COALESCE 函数是用于处理 NULL 值的一种功能。它返回第一个非 NULL 值参数,可以用于设置默认值、替换 NULL 值或实现复杂的判断逻辑。通过在 CDS View 中使用 COALESCE 函数,我们可以更灵活地处理数据,提高查询结果的可读性和可用性。在实际开发中,合理应用 COALESCE 函数可以有效地优化数据处理,增强系统的功能和用户体验。

标签:NULL,vbak,COALESCE,View,CDS,SAP,spfli,view
From: https://www.cnblogs.com/sap-jerry/p/17626433.html

相关文章

  • SAP CDS view 里的 currency_conversion 功能介绍
    SAPABAPCDSView的currency_conversion函数是一种用于在CDS(CoreDataServices)视图中执行货币转换的功能。在SAP系统中,经常需要在不同货币之间进行转换,以便在报表和分析中展示一致的货币金额。currency_conversion函数允许在CDS视图中定义货币转换规则,以便在查询结果中将数值......
  • 因为 SAP UI5 版本升级引起的问题又一例 - 如何分析问题根源
    本教程之前的文章,我们介绍了SAPUI5库文件版本相关的知识:SAPUI5应用开发教程之八十四-如何指定SAPUI5应用程序基于某个特定的版本运行同样一份源代码,使用不同的SAPUI5版本加载,行为可能会有所差异:SAPUI5应用开发教程之一百一十八-如何分析因为SAPUI5版本......
  • SAP Fiori Elements 应用里的 ui5.yaml 文件详解试读版
    本教程第4篇文章,我们介绍了本地启动SAPFioriElements应用的三种模式。4.SAPFioriElements本地应用启动的三种模式辨析以默认方式即命令行yarnstart启动之后,项目文件夹里的ui5.yaml文件会默认被加载并解析。ui5.yaml这个文件,在本地开发FreestyleUI5时也会......
  • SAP UI5 中的 sap-fe-mockserver
    SAPUI5是一种用于构建现代Web应用程序的开发框架,它是SAP(Systems,Applications,andProductsinDataProcessing)公司推出的一种前端技术。它提供了丰富的控件库、MVC(Model-View-Controller)架构模式、数据绑定、主题定制等功能,帮助开发人员构建直观、高度可定制且易......
  • SAP Fiori Elements 应用里的 ui5-local.yaml
    SAPFioriElements是SAP的一种开发框架,用于快速构建SAPFiori应用程序。SAPFioriElements应用程序的一个重要方面是模拟服务器(mockserver),它允许在本地开发环境中模拟OData服务,以便在没有真实后端服务的情况下进行开发和测试。ui5-local.yaml文件用于配置本地开发环境......
  • 【Labview与SQL Server互联(labview可以引用数据库)】
    (Labview与SQLServer互联(labview可以引用数据库))一、工具的下载点击:LabviewSQL工具包进行工具包的下载1.1安装下载完成后,进入C盘,找到如图所示的文件夹,找到需要安装的labview版本文件夹,双击进入找到uesr.lib文件夹,双击进入将刚刚下载的工具包解压,直接复制进user.lib文......
  • 使用LabVIEW 实现物体识别、图像分割、文字识别、人脸识别等深度视觉
    前言哈喽,各位朋友们,这里是virobotics(仪酷智能),这两天有朋友私信问之前给大家介绍的工具包都可以实现什么功能,最新的一些模型能否使用工具包加载,今天就给大家介绍一下博主目前使用工具包已经实现的深度视觉模型及案例下表为前期写过的一些范例介绍,朋友们可以按需点击查看名字......
  • Android View绘制原理-RenderPipeline
    在上一篇关于帧绘制的原理中,做好了EGLSuface切换,同步好了UI的更新,为需要进行GPU绘制的RenderNode创好了SKSurface,最后通过ANativeWindow为下一帧调用了dequeueBuffer。所有的资源和数据都准备好了,从而可以进行绘制,这个任务将由RenderPipeline来完成。我们先不考虑Fence的逻辑,直接接......
  • 使用LiveData、ViewModel在Activity和Fragment,Fragment和Fragment之间共享数据
    一、概述传统的Activity与Fragment之间共享数据,Fragment与Fragment之间共享数据,我一般会采用EventBus事件总线来实现。不过现在可以借助另外一种简单的方式LiveData+ViewModel也可以实现这种共享二、代码示例示例描述:要求FragmentA发送出数据,FragmentB和Activity都能接......
  • 简单介绍LiveData、ViewModel以及使用二者封装一个简单的基类用于测试
    一、概述1.LiveData概述什么事LiveData?1.LiveData是一种可观察的数据存储器类2.LiveData是一个数据持有者,给源数据包装一层。3.源数据使用LiveData包装后,可以被observer观察,数据有更新时observer可感知。4.但observer的感知,只发生在(Activity/Fragment......