case when

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

2. 簡(jiǎn)單 CASE 函數(shù)

語(yǔ)法

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ù)

語(yǔ)法

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

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

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

例如

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

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

ELSE '其他' END

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

比如說(shuō),下面這段 SQL,你永遠(yuǎn)無(wú)法得到“第二類”這個(gè)結(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)換成具體

的列。 看如下的一個(gè)示例:

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

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

SELECT 姓名,

MAX(CASE 課程 WHEN N'語(yǔ)文' THEN 分?jǐn)?shù) ELSE 0 END) 語(yǔ)文,

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

MAX(CASE 課程 WHEN N'物理' THEN 分?jǐn)?shù) ELSE 0 END) 物理

FROM Score

GROUP BY 姓名

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

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

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

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

SELECT * FROM Score

PIVOT( MAX(分?jǐn)?shù)) FOR 課程 IN (語(yǔ)文,數(shù)學(xué),物理)) A

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

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

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

PIVOT 寫法比較固定,是 CASE WHEN 的一種簡(jiǎn)略寫法。

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

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

  • 一.MySQL 的 case when 的語(yǔ)法有兩種: 簡(jiǎn)單函數(shù)CASE [col_name] WHEN [val...
    隨風(fēng)_d6a2閱讀 808評(píng)論 0 0
  • MySql 觸發(fā)器里的流程控制語(yǔ)句: CASE WHEN CASE WHEN 語(yǔ)法有兩種: 簡(jiǎn)單函數(shù)。CASE [...
    lconcise閱讀 554評(píng)論 0 2
  • 本文首發(fā)于知乎:JessieY SQL中的 CASE 類似編程語(yǔ)言里的 if-then-else 語(yǔ)句,用做邏輯判...
    杰西伍卡閱讀 521評(píng)論 0 1
  • 最近有個(gè)統(tǒng)計(jì)的需求,需要在 SQL 中完成,但是出現(xiàn)了一個(gè)問(wèn)題:統(tǒng)計(jì)的時(shí)候由于分母為 0 造成結(jié)果為 null,于...
    帥可兒妞閱讀 1,896評(píng)論 0 1
  • 基礎(chǔ)知識(shí) 當(dāng)我們需要從數(shù)據(jù)源上 直接判斷數(shù)據(jù)顯示代表的含義的時(shí)候 ,就可以在SQL語(yǔ)句中使用 Case When這...
    GeekerLou閱讀 13,170評(píng)論 1 9

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