This is the fifth in a series of articles aimed at introducing the basics of SQL to Excel users. This article shows how to use the IF THEN function in SQL. If you’re interested in the other articles, check them out here:

- Introduction to SQL for Excel Users
- What is the equivalent to VLOOKUP in SQL?
- How to create Pivot Tables in SQL Server
- Simple Data Validation in SQL

**There’ll be more articles in this series, so keep an eye on the blog in the coming weeks!**

### Table of contents

## Excel IF statement: a recap

**The IF function is one of the most commonly used in Excel**. It allows you to perform a comparison against a value in a cell and return a value if the comparison is true, and another value if it’s false.

There are several scenarios when the IF function can be used:

- When we want to swop a text value for a numerical value – e.g. IF(A2=”Yes”, 1, 0)
- When we want to swop a numerical value for a text description – e.g. IF(A2>100, “High”, “Low”)
- When we want to perform a certain calculation when the target value meets a condition – e.g. IF(B2>A2, B2-A2, 0)

IF functions can get a bit nasty when we introduce lots of **nesting**. For example, the following function to determine the commission to use based on total revenue is difficult to troubleshoot with all those brackets (and we’ve all seen worse than this…)

**=IF(B2>15000,20%,
IF(B2>12500,17.5%,
IF(B2>10000,15%,
IF(B2>7500,12.5%,
IF(B2>5000,10%,0)))))**

Thankfully, Excel introduced the IFS function with Excel 2019 which can be used to replace nested IF functions. The same formula above can be written with IFS as:

**=IFS(
B2>15000,20%,
B2>12500,17.5%,
B2>10000,15%,
B2>7500,12.5%,
B2>5000,10%,
true,0)**

(Of course, you could also argue that this type of calculation should really be done with a lookup table and with the XLOOKUP function.)

After that quick re-cap of the use of the IF function in Excel, let’s look at how we can mimic the same behavior when writing queries in SQL.

## Basic CASE Expression in SQL Server

The **CASE expression** works in the same way as the IF and IFS function in Excel. It goes through one or more conditions and returns a value when the first condition is met. So, once a condition is true, it will stop reading and return the result. If no conditions are true, it returns the value in the ELSE clause.

The basic usage of the CASE expression is to use it in a SELECT statement with a simple equality check. In the following example, we’ve used it to change the value of the style categories to make them easier to understand.

**SELECT **

[ProductNumber],

[Name],

CASE Style

WHEN 'U' THEN 'Unisex'

WHEN 'W' THEN 'Women'

WHEN 'M' THEN 'Men'

ELSE 'N/A'

END AS 'Category',

FROM [AdventureWorks2019].[Production].[Product]

Order By [Name]

Here is a description of the syntax:

**CASE input_expression **

WHEN when_expression_1 THEN result_expression_1

WHEN when_expression_n THEN result_expression_n

[ ELSE else_result_expression ]

END

As you can see, the syntax is quite simple. It says “compare the input expression with one or more expressions, returning the corresponding result if TRUE, or the else expression if FALSE.”

**input_expression**: the expression to use in the comparison**when_expression**: a simple expression to which input_expression is compared**result_expression**: the expression returned when input_expression equals when_expression evaluates to TRUE**else_result_expression**: the expression returned if no comparison operation evaluates to TRUE.

## More examples of the CASE expression

### Using Comparison Values

The example below builds on the simple expression above by including comparison values in the when_expression to include a text comment for the price range of a product.

**SELECT **

[ProductNumber],

[Name],

CASE

WHEN ListPrice = 0 THEN 'Manufacturing Item - Not for resale'

WHEN ListPrice < 50 THEN 'Under $50'

WHEN ListPrice >= 50 and ListPrice < 250 THEN '$50 to $250'

WHEN ListPrice >= 250 and ListPrice < 500 THEN '$250 to $500'

WHEN ListPrice >= 500 and ListPrice < 1000 THEN '$500 to $1000'

WHEN ListPrice >= 1000 and ListPrice <= 2000 THEN '$1000 to $2000'

ELSE 'Over $2000'

END As 'Price Range'

FROM [AdventureWorks2019].[Production].[Product]

Order By [Name]

### Group By a CASE statement

We can use a GROUP BY expression to show how many products fall into each price range.

**SELECT **

CASE WHEN ListPrice = 0 THEN 'Manufacturing Item - Not for resale'

WHEN ListPrice < 50 THEN 'Under $50'

WHEN ListPrice >= 50 and ListPrice < 250 THEN '$50 to $250'

WHEN ListPrice >= 250 and ListPrice < 500 THEN '$250 to $500'

WHEN ListPrice >= 500 and ListPrice < 1000 THEN '$500 to $1000'

WHEN ListPrice >= 1000 and ListPrice <= 2000 THEN '$1000 to $2000'

ELSE 'Over $2000'

END As 'Price Range',

COUNT([Name]) As 'Product Count'

FROM [AdventureWorks2019].[Production].[Product]

GROUP BY

CASE

WHEN ListPrice = 0 THEN 'Manufacturing Item - Not for resale'

WHEN ListPrice < 50 THEN 'Under $50'

WHEN ListPrice >= 50 and ListPrice < 250 THEN '$50 to $250'

WHEN ListPrice >= 250 and ListPrice < 500 THEN '$250 to $500'

WHEN ListPrice >= 500 and ListPrice < 1000 THEN '$500 to $1000'

WHEN ListPrice >= 1000 and ListPrice <= 2000 THEN '$1000 to $2000'

ELSE 'Over $2000'

END

ORDER BY 'Product Count' desc

*Note that we could alternatively include the CASE expression in the GROUP BY using a subquery instead of repeating the CASE expression in the GROUP BY.*

### Order by a CASE Statement

Another useful example for the CASE expression is when you want to order your result set in a specific way.

The example below shows how the CASE expression can be used to order a list of employees, with the senior ones listed at the top in a specific order, followed by the others in alphabetical order.

**SELECT **

[LastName],

[JobTitle]

FROM [AdventureWorks2019].[HumanResources].[vEmployee]

ORDER BY

CASE

When [JobTitle] = 'Chief Executive Officer' THEN 1

When [JobTitle] = 'Chief Financial Officer' THEN 2

When [JobTitle] = 'Vice President of Sales' THEN 3

When [JobTitle] = 'Vice President of Engineering' THEN 4

When [JobTitle] = 'Vice President of Production' THEN 5

ELSE 6

END,

[JobTitle]

## Summary

This article has introduced the **CASE expression** which is used to compare conditions and return certain values when conditions are met. It mimics the behavior of the **IF** (and newer **IFS**) function in **Excel.**

Use the CASE expression when you need to add contextual information to the results of your queries and also when you need to manipulate the order of result sets. There are other use cases beyond these two simple examples, but these are the most common ones.

**If your organization uses both SQL Server and Excel, then check out the SQL Spreads Add-In for Excel; it will greatly simplify how you manage your data environment.**

## Leave a Reply

No comments yet. Be the first!