case when

1.CASE 具有兩種格式,簡單 CASE 函數(shù)和 CASE 搜索函數(shù)。

2. 簡單 CASE 函數(shù)

語法

CASE column

WHEN <condition> THEN value

WHEN <condition> THEN value

......

ELSE value END

示例

CASE sex

WHEN '1' THEN '男'

WHEN '2' THEN '女'

ELSE '其他' END

3.CASE 搜索函數(shù)

語法

CASE

WHEN <condition> [,<condition>] THEN value

WHEN <condition> [,<condition>] THEN value

......

ELSE value END

示例

CASE WHEN sex = '1' THEN '男'

WHEN sex = '2' THEN '女'

ELSE '其他' END

簡單 CASE 函數(shù)重在簡潔,但是它只適用于這種單字段的單值比較

CASE 搜索函數(shù)的優(yōu)點在于適用于所有比較(包括多值比較)的情況。

例如

CASE WHEN sex = '1' AND age>18 THEN '成年男性'

WHEN sex = '2' AND age>18 THEN '成年女性'

ELSE '其他' END

注意:CASE 函數(shù)只返回第一個符合條件的值,剩下的 CASE 部分將會被自動忽略。

比如說,下面這段 SQL,你永遠無法得到“第二類”這個結(jié)果

CASE WHEN Type IN ('a','b') THEN '第一類'

WHEN Type IN ('a') THEN '第二類'

ELSE '其他類' END

4.CASE 行轉(zhuǎn)列

CASE 用的比較廣泛的功能就是行轉(zhuǎn)列,就是將記錄行里的數(shù)據(jù)按條件轉(zhuǎn)換成具體

的列。 看如下的一個示例:

現(xiàn)在我們想實現(xiàn)這樣的功能,就是將各學(xué)科作為單獨的列來顯示各個學(xué)生各科的成

績。我們可以對課程里的記錄做如下的行列轉(zhuǎn)換:

SELECT 姓名,

MAX(CASE 課程 WHEN N'語文' THEN 分數(shù) ELSE 0 END) 語文,

MAX(CASE 課程 WHEN N'數(shù)學(xué)' THEN 分數(shù) ELSE 0 END) 數(shù)學(xué),

MAX(CASE 課程 WHEN N'物理' THEN 分數(shù) ELSE 0 END) 物理

FROM Score

GROUP BY 姓名

執(zhí)行結(jié)果如下:

5. 行轉(zhuǎn)列新方法

這樣就很好的完成了行列的轉(zhuǎn)換了,當(dāng)然這只是一個比較簡單的例子,SQL Server 2005 版

之后有單獨的行列轉(zhuǎn)換功能 PIOVT,以下查詢同樣可以得到上面的結(jié)果:

SELECT * FROM Score

PIVOT( MAX(分數(shù)) FOR 課程 IN (語文,數(shù)學(xué),物理)) A

其中 FOR 后面的是我們即將進行行轉(zhuǎn)列的列部分

IN 里面的是我們行轉(zhuǎn)列之后的列

MAX 是聚合 IN 里面的內(nèi)容,也可以是其他聚合函數(shù):SUM,MIN,COUNT 等

PIVOT 寫法比較固定,是 CASE WHEN 的一種簡略寫法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容