• SQL Spreads Blog
  • What is the equivalent of the IF THEN function in SQL?

    Andy McDonald - Aug 24, 2022

    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:

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

    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]

    SQL CASE Statement - Simple

    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]

    SQL CASE Statement - Comparison Values

    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

    SQL CASE Statement - Group By

    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]

    SQL CASE Statement - Order By

    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!

Use Excel to update your data in SQL Server?

Try the SQL Spreads data management solution to update and manage your SQL Server data from within Excel.