Summary: in this tutorial, you will learn how to use the SQL Server COALESCE expression to deal with NULL in queries.
Introduction to SQL Server COALESCE expression #
The SQL Server COALESCE expression accepts a number of arguments, evaluates them in sequence, and returns the first non-null argument.
The following illustrates the syntax of the COALESCE expression:
COALESCE(e1,[e2,...,en])
Code language: SQL (Structured Query Language) (sql)In this syntax, e1, e2, … en are scalar expressions that evaluate to scalar values. The COALESCE expression returns the first non-null expression. If all expressions evaluate to NULL, then the COALESCE expression return NULL;
Because the COALESCE is an expression, you can use it in any clause that accepts an expression such as SELECT, WHERE, GROUP BY, and HAVING.
SQL Server COALESCE expression examples #
Let’s see practical examples of using the COALESCE expression
A) Using SQL Server COALESCE expression with character string data example #
The following example uses the COALESCE expression to return the string 'Hi' because it is the first non-null argument:
SELECT
COALESCE(NULL, 'Hi', 'Hello', NULL) result;
Code language: SQL (Structured Query Language) (sql)Here is the output:
result
------
Hi
(1 row affected)B) Using SQL Server COALESCE expression with the numeric data example #
This example uses the COALESCE expression to evaluate a list of arguments and to return the first number:
SELECT
COALESCE(NULL, NULL, 100, 200) result;
Code language: SQL (Structured Query Language) (sql)The output is as follows:
result
-----------
100
(1 row affected)C) Using SQL Server COALESCE expression to substitute NULL by new values #
See the following sales.customers table from the sample database.

The following query returns first name, last name, phone, and email of all customers:
SELECT
first_name,
last_name,
phone,
email
FROM
sales.customers
ORDER BY
first_name,
last_name;
Code language: SQL (Structured Query Language) (sql)Here is the partial output:

The phone column will have NULL if the customer does not have the phone number recorded in the sales.customers table.
To make the output more business friendly, you can use the COALESCE expression to substitute NULL by the string N/A (not available) as shown in the following query:
SELECT
first_name,
last_name,
COALESCE(phone,'N/A') phone,
email
FROM
sales.customers
ORDER BY
first_name,
last_name;
Code language: SQL (Structured Query Language) (sql)The following picture shows the partial output:

D) Using SQL Server COALESCE expression to use the available data #
First, create a new table named salaries that stores the employee’s salaries:
CREATE TABLE salaries (
staff_id INT PRIMARY KEY,
hourly_rate decimal,
weekly_rate decimal,
monthly_rate decimal,
CHECK(
hourly_rate IS NOT NULL OR
weekly_rate IS NOT NULL OR
monthly_rate IS NOT NULL)
);
Code language: SQL (Structured Query Language) (sql)Each staff can have only one rate either hourly, weekly, or monthly.
Second, insert some rows into the salaries table:
INSERT INTO
salaries(
staff_id,
hourly_rate,
weekly_rate,
monthly_rate
)
VALUES
(1,20, NULL,NULL),
(2,30, NULL,NULL),
(3,NULL, 1000,NULL),
(4,NULL, NULL,6000);
(5,NULL, NULL,6500);
Code language: SQL (Structured Query Language) (sql)Third, query data from the salaries table:
SELECT
staff_id,
hourly_rate,
weekly_rate,
monthly_rate
FROM
salaries
ORDER BY
staff_id;
Code language: SQL (Structured Query Language) (sql)Here is the output:

Fourth, calculate monthly for each staff using the COALESCE expression as shown in the following query:
SELECT
staff_id,
COALESCE(
hourly_rate*22*8,
weekly_rate*4,
monthly_rate
) monthly_salary
FROM
salaries;
Code language: SQL (Structured Query Language) (sql)The following picture shows the output:

In this example, we used the COALESCE expression to use only non-NULL value found in the hourly_rate, weekly_rate, and monthly_rate columns.
COALESCE vs. CASE expression #
The COALESCE expression is a syntactic sugar of the CASE expression.
The following expressions return the same result:
COALESCE(e1,e2,e3)
CASE
WHEN e1 IS NOT NULL THEN e1
WHEN e2 IS NOT NULL THEN e2
ELSE e3
END
Code language: SQL (Structured Query Language) (sql)Note that the query optimizer may use the CASE expression to rewrite the COALESCE expression.
In this tutorial, you have learned how to use the SQL Server COALESCE expression to handle NULL values in queries.