case when sql
Here’s a clear, SEO‑friendly “Quick Scoop” on CASE WHEN in SQL, with
examples and mini‑sections tailored to your post settings.
CASE WHEN in SQL: Quick Scoop
The CASE WHEN statement in SQL is like an inline IF / IF‑ELSE that lets
you return different values based on conditions directly inside a query.
What is CASE WHEN?
At a high level, CASE lets you:
- Add conditional logic inside
SELECT,ORDER BY,GROUP BY, and evenUPDATE/DELETE.
- Transform raw values into readable labels (e.g., status codes → text).
- Create computed columns based on rules (e.g., ranges, flags, categories).
It behaves very much like:
IF condition1 THEN result1
ELSE IF condition2 THEN result2
ELSE default_result
Basic Syntax (Two Flavors)
There are two common forms: “simple” and “searched” CASE.
1. Simple CASE (compare to a single expression)
Use this when you compare one column to several possible values.
sql
CASE status
WHEN 'A' THEN 'Active'
WHEN 'I' THEN 'Inactive'
WHEN 'T' THEN 'Terminated'
ELSE 'Unknown'
END
statusis evaluated once.
- The first matching
WHENreturns itsTHENvalue.
ELSEis the fallback when nothing matches.
2. Searched CASE (full conditions)
Use this when you need arbitrary logical conditions (>, <, BETWEEN,
LIKE, etc.).
sql
CASE
WHEN age > 22 THEN 'Age is greater than 22'
WHEN age = 21 THEN 'Age is 21'
WHEN age = 22 THEN 'Age is 22'
ELSE 'Age is 22 or below'
END
- Each
WHENholds a Boolean condition.
- SQL stops at the first
WHENthat evaluates to true.
Typical Use Cases (With Mini Examples)
1. Creating readable categories
Turn raw numeric or string values into human‑friendly labels.
sql
SELECT
customer_id,
age,
CASE
WHEN age < 18 THEN 'Minor'
WHEN age BETWEEN 18 AND 25 THEN 'Young Adult'
WHEN age BETWEEN 26 AND 40 THEN 'Adult'
ELSE 'Senior'
END AS age_group
FROM customers;
You’ll see this a lot in analytics dashboards and BI reports.
2. Conditional calculations
You can embed logic into arithmetic, not just text labels.
sql
SELECT
product,
quantity,
price,
CASE
WHEN product LIKE '%Bread%' OR product LIKE '%Cheese%'
THEN (quantity + 1) * price -- upsell logic
ELSE quantity * price
END AS total_with_upsell
FROM order_lines;
This pattern is common when modeling promotions, discounts, or special pricing rules.
3. Mapping codes to text
If you have status or flag codes, use CASE to make them readable.
sql
SELECT
status,
CASE status
WHEN 'a1' THEN 'Active'
WHEN 'i' THEN 'Inactive'
WHEN 't' THEN 'Terminated'
ELSE 'UNKNOWN - PLEASE CHECK'
END AS status_text
FROM some_table;
A safety tip people often recommend: always define an ELSE like 'UNKNOWN'
instead of leaving it blank so unexpected codes stand out.
4. Conditional aggregation
You can use CASE inside aggregates like SUM or COUNT to simulate filtered
aggregates.
sql
SELECT
customer_id,
SUM(CASE WHEN status = 'PAID' THEN amount ELSE 0 END) AS paid_amount,
SUM(CASE WHEN status = 'PENDING' THEN amount ELSE 0 END) AS pending_amount
FROM invoices
GROUP BY customer_id;
This is heavily used in reporting queries where you need multiple metrics from one scan of the table.
Where CAN You Use CASE?
You can use CASE almost anywhere an expression is allowed.
- In
SELECT(most common) to build derived columns.
- In
ORDER BYto sort on dynamic rules (e.g., custom priority sort).
- In
GROUP BYin some dialects, usually by repeating the expression or using a subquery/CTE.
- In
UPDATE/DELETEto conditionally change or filter rows.
Example: custom ordering with CASE:
sql
SELECT ticket_id, priority
FROM tickets
ORDER BY
CASE priority
WHEN 'HIGH' THEN 1
WHEN 'MEDIUM' THEN 2
WHEN 'LOW' THEN 3
ELSE 4
END;
Key Rules and Gotchas
A few important behavior points that often trip people up:
- SQL evaluates
WHENclauses from top to bottom and stops at the first true one.
- All
THENandELSEresults in a single CASE should be of compatible types (e.g., all strings, or all numeric) or the DB will try to cast them.
ELSEis optional, but if you omit it and nothing matches, the result isNULL.
- You cannot use
CASEas a control‑flow structure around whole SQL statements; it’s an expression that returns a value.
When Should You Think “I Probably Need a CASE”?
A quick mental checklist, inspired by common advice in SQL communities:
Ask yourself:
- “Do I need one output column, but the value depends on conditions?” → Likely
CASE.
- “Am I about to create multiple nearly identical queries just to change one bit of logic?” → Combine them with
CASE.
- “Do I want to compute several aggregates from the same table but filtered differently?” → Use
SUM(CASE WHEN ...)orCOUNT(CASE WHEN ...).
- “Am I mapping a small set of codes to human text?” → Simple
CASE column WHEN ....
A small “feel” example: if you find yourself thinking “if this row meets condition X, return this; otherwise that”, that’s exactly a CASE use case.
Nested CASE (Advanced but Common)
You can nest one CASE inside another when you have sub‑logic within a category.
sql
CASE
WHEN country = 'US' THEN
CASE
WHEN age < 18 THEN 'US Minor'
ELSE 'US Adult'
END
ELSE
CASE
WHEN age < 18 THEN 'Non-US Minor'
ELSE 'Non-US Adult'
END
END AS region_age_group
This is useful for multi‑level segmentation, like combining location and age, product type and revenue, etc.
Small HTML Table of Examples
Since you requested tables as HTML, here’s a compact cheat sheet:
html
<table>
<thead>
<tr>
<th>Goal</th>
<th>Pattern</th>
<th>Example Snippet</th>
</tr>
</thead>
<tbody>
<tr>
<td>Map codes to labels</td>
<td>Simple CASE</td>
<td><code>CASE status WHEN 'A' THEN 'Active' ELSE 'Unknown' END</code></td>
</tr>
<tr>
<td>Range-based categories</td>
<td>Searched CASE</td>
<td><code>CASE WHEN age < 18 THEN 'Minor' WHEN age <= 40 THEN 'Adult' ELSE 'Senior' END</code></td>
</tr>
<tr>
<td>Conditional sums</td>
<td>CASE in SUM</td>
<td><code>SUM(CASE WHEN status = 'PAID' THEN amount ELSE 0 END)</code></td>
</tr>
<tr>
<td>Custom sorting</td>
<td>CASE in ORDER BY</td>
<td><code>ORDER BY CASE priority WHEN 'HIGH' THEN 1 WHEN 'LOW' THEN 3 END</code></td>
</tr>
<tr>
<td>Multi-level segmentation</td>
<td>Nested CASE</td>
<td><code>CASE WHEN country='US' THEN CASE WHEN age<18 THEN 'US Minor' END END</code></td>
</tr>
</tbody>
</table>
(All patterns above align with standard CASE behavior across major SQL dialects.)
Quick SEO Bits for Your Post
- Focus keyword to sprinkle: case when sql (title, intro, one H2, and a few body lines).
- Related phrases to naturally include: “SQL CASE statement”, “conditional logic in SQL”, “map codes to labels”, “conditional aggregation”.
- Meta description idea (under ~160 chars):
Learn how to use CASE WHEN in SQL to add conditional logic, create categories, and build cleaner analytics queries with practical examples.
TL;DR: Use CASE WHEN whenever you need one expression whose value
changes based on row‑level conditions—labels, ranges, special calculations,
and custom aggregates all fit this pattern.
Information gathered from public forums or data available on the internet and portrayed here.