Case Statement Tricks
March 18, 2001
The CASE statement is a very flexible tool. Here are just a few of the tricks you can work with it.
One of the simplest things you can do is to derive a columns contents based on it's contents, or the contents of another data item.
You can use CUBE and ROLLUP to produce totals and subtotals within a result set, but because SQL Server places NULLS for non-totaled columns in the total rows, they do not always look very pretty. In this example we use the CASE statement to place emphasis on the subtotal lines.
This batch lists of sales by store, and gives a general indication of the stores performance against the average quantity of sales per store.
This query batch starts by calculating the average of total sales per store, which is stored in the variable @storeAvg, then that average is used to rate the stores sales performance.
Grouping data into ranges
This example calculates the number of orders in certain size ranges. It also shows off the power of SQL as a set-based language: to code this as in a procedural language like VB would not be able to do this in a single statement.
CASE statements can be used in an 'ORDER BY clause to order non-sequential data. This example sorts stores by name, but puts all the stores in California at the top of the list.
This article discusses how to increase performance of complex UPDATE statements by using CASE.
This SQL 2000 article contains a section that shows how to use the CASE statement in a User Defined Function to enforce complex declarative constraints