當使用CASE
語句,我知道具體根據documentation我可以使用一個簡單的CASE
表達,與input_expression
和對when_expression
和result_expression
值(在這些例子中,在myField
值始終爲正整數假設):在CASE語句中使用IN而不重複輸入表達式?
CASE [input_expression]
WHEN [when_expression] THEN [result_expression]
...
ELSE [result_expression]
END
CASE myField
WHEN 1 THEN 'One'
WHEN 2 THEN 'Two'
WHEN 3 THEN 'Three'
ELSE 'More than three'
END
或我可以使用一個搜索CASE
表達式中,用雙Boolean_expression
和result_expression
值:
CASE
WHEN [Boolean_expression] THEN [result_expression]
...
ELSE [result_expression]
END
CASE
WHEN myField = 1 THEN 'One'
WHEN myField = 2 THEN 'Two'
WHEN myField = 3 THEN 'Three'
ELSE 'More than three'
END
我也知道,我可以使用IN
操作任何Boolean_expression
的部分寫入一個搜索CASE
表達式時:
CASE
WHEN myField IN (1,2) THEN 'One or two'
WHEN myField = 3 THEN 'Three'
ELSE 'More than three'
END
什麼是真正有用的將是能夠編寫簡單,當使用IN
操作CASE
表達,如:
CASE myField
WHEN IN (1,2,3) THEN 'Between one and three'
WHEN IN (4,5,6) THEN 'Between four and six'
WHEN IN (7,8,9) THEN 'Between seven and nine'
ELSE 'More than nine'
END
但這不會運行,並給出了錯誤:
Incorrect syntax near the keyword 'IN'.
顯然我上面的例子是人爲設計的,但有沒有什麼辦法可以寫出簡單的CASE
表達式,還可以用IN
這個運算符?
我從閱讀語法在MSDN上,它似乎這是不可能的,原因很簡單,CASE
表達是如何形成的理解 - 比較input_expression
每個when_expression
平等 - 但我只是想知道如果有任何一種方式以實現我所要求的,因爲在搜索到的CASE
表達式的每個WHEN
子句中一遍又一遍地保存相同的字段名稱將會很方便。
不可以。它沒有這樣的語法。最接近的就是你的第三個例子 – GurV