SQL語句 select case when (轉)
阿新 • • 發佈:2019-02-01
CASE 可能是 SQL 中被誤用最多的關鍵字之一。雖然你可能以前用過這個關鍵字來建立欄位,但是它還具有更多用法。例如,你可以在 WHERE 子句中使用 CASE。
首先讓我們看一下 CASE 的語法。在一般的 SELECT 中,其語法如下:
SELECT<myColumnSpec>=
CASE
WHEN<A>THEN<somethingA>
WHEN<B>THEN<somethingB>
ELSE<somethingE>
END
在上面的程式碼中需要用具體的引數代替尖括號中的內容。下面是一個簡單的例子:
USE pubs GO
SELECT
Title,
'Price Range'=
CASE
WHEN price ISNULLTHEN'Unpriced'
WHEN price <10THEN'Bargain'
WHEN price BETWEEN10and20THEN'Average'
ELSE'Gift to impress relatives'
END
FROM titles
ORDERBY price
GO
這是 CASE 的典型用法,但是使用 CASE 其實可以做更多的事情。比方說下面的 GROUPBY 子句中的
SELECT'Number of Titles', Count(*)
FROM titles
GROUPBY
CASE
WHEN price ISNULLTHEN'Unpriced'
WHEN price <10THEN'Bargain'
WHEN price BETWEEN10and20THEN'Average'
ELSE'Gift to impress relatives'
END
GO
你甚至還可以組合這些選項,新增一個 ORDERBY 子句,如下所示:
USE pubs
GO
SELECT
WHEN price ISNULLTHEN'Unpriced'
WHEN price <10THEN'Bargain'
WHEN price BETWEEN10and20THEN'Average'
ELSE'Gift to impress relatives'
ENDAS Range,
Title
FROM titles
GROUPBY
CASE
WHEN price ISNULLTHEN'Unpriced'
WHEN price <10THEN'Bargain'
WHEN price BETWEEN10and20THEN'Average'
ELSE'Gift to impress relatives'
END,
Title
ORDERBY
CASE
WHEN price ISNULLTHEN'Unpriced'
WHEN price <10THEN'Bargain'
WHEN price BETWEEN10and20THEN'Average'
ELSE'Gift to impress relatives'
END,
Title
GO
注意,為了在 GROUPBY 塊中使用 CASE,查詢語句需要在 GROUPBY 塊中重複 SELECT 塊中的 CASE 塊。
除了選擇自定義欄位之外,在很多情況下 CASE 都非常有用。再深入一步,你還可以得到你以前認為不可能得到的分組排序結果集