cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

if/else vs case

Former Member
5,096

Wondering if anyone has an opinion on the following. I have query where I need to eliminate the data in a field under a certain condition: if the quantity field of a record is 0 then I don't need to see the location field of that same record.

I've set up a case statement as such:

case when quantity = 0 then NULL when quantity > 0 then [Location] end) as [Location]

Then I saw if/else and set this up:

if quantity > 0 then [Location] else NULL endif as [Location]

They appear to pull and display the same data. Is there a benefit to either?

Thank you.

View Entire Topic
VolkerBarth
Contributor

In general, I would prefer

  • if-expressions for typical boolean comparisons and
  • case-expressions for more than two cases.

That's comparable to the question whether to use if or switch/case in C/C++ and similar programming languages.

So, for your sample, I would suggest to use the if-expression.

Note that there's another variant of the case-expression (though not possible in your sample):

CASE expression0
WHEN expression1 THEN expression2, ...
WHEN expression3 THEN expression4, ...
                 ELSE expressionX
END CASE

This does test expression0 against a list of expressions (expression1, expression3, ...) and is somewhat shorther than the CASE WHEN search-condition ... syntax.


Just to add:

When the expression in the ELSE clause (both with IF and CASE) should return NULL (as in your example), then you can leave out the ELSE clause - omiting it is identical to ELSE NULL. So your expression could be reduced to:

if quantity > 0 then [Location] endif as [Location]

As always, leaving out the ELSE part may decrease the readibility based on whether one is used to the default NULL result or not.