Field note · April 4, 2026

Pattern: Conditional pivot

Reshape long to wide with CASE inside an aggregate. Portable, readable, and it works everywhere.

1 min read ·Analytics engineering ·sql

The shape: sum(case when key = 'x' then value end) — one column per value you want. — that is Conditional pivot, and it comes up more than it should.

Reshape long to wide with CASE inside an aggregate. Portable, readable, and it works everywhere.

What makes it a pattern rather than a tip is that the wrong version is the one you write naturally. It reads correctly, it runs, and it returns something. The failure is in the result, not in the execution — which means the only defence is recognising the shape before you are in it.

Two datasets on this site have the shape built in: retail-orders and flight-delays. Both are small enough to run the broken version, see the number, then run the corrected one and see it change.

It lives under shaping because the fix is in how the rows are arranged, not in the arithmetic. Almost every "the number is wrong" report that turns out to be real lands here.

The long-form treatment is in the course (rows-grain-shape, sql-interview-patterns); the pattern page is the version to read at 4pm with a query open.

If you have a better formulation of this one, the repository takes issues. Several entries there are sharper than what we started with because someone pushed back.

AE

Analytics engineering

Turning warehouses full of raw tables into models an analyst can trust without asking anyone.

Dimensional modelling, grain, slowly changing dimensions, metric definitions, and the SQL that survives production. Most "we need a data scientist" problems are "we need one correct table" problems.

Related

All field notes    2026 archive