查询语句:
以下查询尝试在WHERE子句中使用CASE语句,根据@locationType和@locationID的值进行过滤:
<code class="language-sql">declare @locationType varchar(50); declare @locationID int; SELECT column1, column2 FROM viewWhatever WHERE CASE @locationType WHEN 'location' THEN account_location = @locationID WHEN 'area' THEN xxx_location_area = @locationID WHEN 'division' THEN xxx_location_division = @locationID END;</code>
错误:
此查询导致语法错误,因为CASE表达式期望单个返回值。各个WHEN子句错误地包含了不属于CASE表达式的等式比较(= @locationID)。
解决方案:
在WHERE子句中使用CASE语句的正确语法是将表达式赋值给目标列:
<code class="language-sql">declare @locationType varchar(50); declare @locationID int; SELECT column1, column2 FROM viewWhatever WHERE @locationID = CASE @locationType WHEN 'location' THEN account_location WHEN 'area' THEN xxx_location_area WHEN 'division' THEN xxx_location_division END;</code>
在这个修改后的查询中,CASE表达式根据@locationType的值返回相应的定位标识符。然后,WHERE子句将此值与@locationID进行比较,以按预期过滤结果。
以上是如何在SQL WHERE子句中使用CASE语句进行条件过滤?的详细内容。更多信息请关注PHP中文网其他相关文章!