查詢語句:
以下查詢嘗試在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中文網其他相關文章!