1. 程式人生 > >SQL語句 select case when (轉)

SQL語句 select case when (轉)

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 子句中的 
CASE

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
    
CASE
        
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 都非常有用。再深入一步,你還可以得到你以前認為不可能得到的分組排序結果集