IIF: from Tableau to SQL

Returns separate branches for true, false, and unknown conditions. Below, 8 sample rows go through the calculation and through the SQL, and both return the same numbers.

Calculated field

IIF([flag], 'ready', 'hold', 'unknown')

Sample data

labelquantityamountflag
cedar cedar 6512.8True
ORCHID-west66-7.6False
maple-east670null
willow north6825.3True
birch-birch694.9False
pine/south70-1.2null
ash719True
nullnullnullnull

The same calculation as SQL

SELECT CASE WHEN flag IS TRUE THEN 'ready' WHEN flag IS FALSE THEN 'hold' ELSE 'unknown' END AS result FROM input

Runs the example above.

Result

result
ready
hold
unknown
ready
hold
unknown
ready
unknown

Same rows from the calculation and from the SQL in DuckDB.

Where a naive translation goes wrong

  • Replacing IIF with CASE WHEN flag THEN 'ready' ELSE 'hold' END changes the shown values or null handling.

    Naive SQL

    SELECT CASE WHEN flag THEN 'ready' ELSE 'hold' END AS result FROM input
    result
    ready
    hold
    hold
    ready
    hold
    hold
    ready
    hold

    Matches the calculation

    SELECT CASE WHEN flag IS TRUE THEN 'ready' WHEN flag IS FALSE THEN 'hold' ELSE 'unknown' END AS result FROM input
    result
    ready
    hold
    unknown
    ready
    hold
    unknown
    ready
    unknown

Signature

IIF(boolean, then, else, [unknown])