This is experimental functionality, and as such subject to change. Use at your own risk!

# CASE with DISTINCT FROM to DECODE

Applies to ✅ Open Source Edition ✅ Express Edition ✅ Professional Edition ✅ Enterprise Edition

When a searched CASE expression contains DISTINCT predicates, which always share the same operand, the expression might be replaced by the shorter DECODE function

Using Settings.transformPatternsCaseDistinctToDecode, the following transformations can be achieved:

-- With Settings.transformPatternsCaseDistinctToDecode active, this: SELECT CASE WHEN a IS NOT DISTINCT FROM b THEN 1 END, CASE WHEN a IS NOT DISTINCT FROM b THEN 1 ELSE 2 END, CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 END, CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 ELSE 3 END FROM tab; -- ... is transformed into the equivalent expression: SELECT DECODE(a, b, 1), -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 END, DECODE(a, b, 1, 2), -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 ELSE 2 END, DECODE(a, b, 1, c, 2), -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 END, DECODE(a, b, 1, c, 2, 3) -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 ELSE 3 END, FROM tab;

## Feedback

Do you have any feedback about this page? We'd love to hear it!