Home > Software design >  Case statement in the where clause SQL
Case statement in the where clause SQL

Time:11-04

I have a parameter called @Unit.

I also have a unit column in my table. I Have other requirements so I need to do a case statement in the where clause.

CASE 
    WHEN @Unit > 0
    THEN unit = @Unit
END

The statement however is not accepting my =. I'm getting an error on =.

Any advice would be helpful.

CodePudding user response:

A CASE expression has a result. Yours is unit = @Unit (or null in case @Unit is not greater than zero). Now, unit = @Unit is a boolean expression and its result is a boolean value (TRUE, FALSE or null). Not all DBMS, however, support a boolean datatype in their SQL dialect. Yours doesn't seem to accept it.

But why use a CASE expression at all? A CASE expression is used to evaluate a boolean expression (in your case @Unit > 0). But a WHERE clause already does this. For this reason it is rare we use CASE expressions in WHERE. We usually simply use AND and OR instead.

WHERE unit = @Unit OR (@Unit <= 0 OR @Unit IS NULL)

or

WHERE unit = @Unit OR COALESCE(@Unit, 0) <= 0

CodePudding user response:

unit = case when ISNULL(@Unit,0) > 0 then @Unit else unit end    

this means if ISNULL(@Unit,0) has value, then use the unit = @Unit, else unit = unit (the column of unit is equal to the column of unit)

  •  Tags:  
  • sql
  • Related