Post

COALESCE Function in ABAP SQL

Learn how to use the COALESCE function in ABAP SQL to return the first non-null value from a list of arguments in SELECT statements.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
*The COALESCE function takes a list of at least two (and up to 255) arguments (arg1, arg2, ..., argn). 
*It returns the first non-null value from the list, or the last argument if all are null.

DATA(lt_salesorders) = VALUE tt_salesorder(
  ( salesorder = '1' netvalue = '100.00' customer = 'CUST_1' )
  ( salesorder = '2' netvalue = '100.00' customer = 'CUST_2' )
  ( salesorder = '3' netvalue = '100.00' customer = 'CUST_3' )
).

DATA(lt_customer_one) = VALUE tt_customer(
  ( customer = 'CUST_1' customername = 'Customer 1' addressid = 1 )
).

DATA(lt_customer_two) = VALUE tt_customer(
  ( customer = 'CUST_2' customername = 'Customer 2' addressid = 2 )
).

DATA(lt_customer_address) = VALUE tt_customer_address(
  ( addressid = 1 address = 'Sitheri, Cuddalore' )
  ( addressid = 2 address = 'Velluvadi, Perambalur' )
).

SELECT FROM @lt_salesorders AS a
  LEFT OUTER JOIN @lt_customer_one AS b ON b~customer = a~customer
  LEFT OUTER JOIN @lt_customer_two AS c ON c~customer = a~customer
  LEFT OUTER JOIN @lt_customer_address AS d ON d~addressid = COALESCE( b~addressid, c~addressid )
  FIELDS a~salesorder,
         a~netvalue,
         a~customer,
         COALESCE( b~customername, c~customername ) AS customername,
         d~address AS customeraddress
  INTO TABLE @DATA(lt_salesorders_with_customer).

"Output
*SALESORDER NETVALUE CUSTOMER CUSTOMERNAME CUSTOMERADDRESS
*1          100.0    CUST_1   Customer 1   Sitheri, Cuddalore
*2          100.0    CUST_2   Customer 2   Velluvadi, Perambalur
*3          100.0    CUST_3
This post is licensed under CC BY 4.0 by the author.