[英]Use comparison signs inside a sql case statement
我正在尋找一種使用小於和大於符號在sql select查詢中構建case語句的方法。 例如,我想根據變量選擇排名:
DECLARE @a INT
SET @a = 0
SELECT CASE
WHEN @a < 3 THEN 0
WHEN @a = 3 THEN 1
WHEN @a > 3 THEN 2
END
我想把它寫成:
DECLARE @a INT
SET @a = 0
SELECT CASE @a
WHEN < 3 THEN 0
WHEN 3 THEN 1
WHEN > 3 THEN 2
END
...但SQL不允許我以這種方式使用<和>符號。 有沒有辦法可以做到這一點是SQL 2005,還是我需要像第一個那樣使用代碼。
只需要一次代碼的原因是因為它會使代碼更易讀/可維護,而且因為我不確定SQL服務器是否必須為每個CASE語句運行計算。
我正在尋找一個VB.NET案例聲明equivelent:
Select Case i
Case Is < 100
p = 1
Case Is >= 100
p = 2
End Select
也許這在SQL中是不可能的,沒關系,我只想確認一下。
您可以使用SIGN功能
DECLARE @a INT
SET @a = 0
SELECT CASE SIGN(@a - 3)
WHEN -1 THEN 0
WHEN 0 THEN 1
WHEN 1 THEN 2
END
如果@a
小於3,則@a - 3
導致負int,其中SIGN返回-1。
如果@a
為3或更大,則SIGN分別返回0或1。
如果您想要的輸出是0,1和2,那么您可以進一步簡化:
DECLARE @a INT
SET @a = 0
SELECT SIGN(@a - 3) + 1
使用@Jose Rui Santos建議的 SIGN
似乎是一個很好的解決方法。 另一種方法是為表達式分配別名,使用子選擇並在外部選擇中測試表達式(使用其別名):
SELECT
…,
CASE
WHEN expr < 3 THEN …
WHEN expr > 3 THEN …
END AS …
FROM (
SELECT
…,
AS expr
FROM …
…
)
SELECT
CASE
WHEN ColumnName >=1 and ColumnName <=1 THEN 'Fail'
WHEN ColumnName >=6 THEN 'Pass'
ELSE 'Test'
END
FROM TableName
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.