目錄
- 闡述
- 適用情景
- 舉例說明
- 結合其他語言理解
- 小結
闡述
case when then else end可以理解為流程控制語句或條件控制語句。可以實現資料獲取的時候,可以更多的條件和自定義邏輯。
適用情景
case when then else end作為數據庫查詢入門必掌握的技能。- 對已知的數據庫中數據,按照自己的邏輯,進行自定義分組和數據分析
- 用此條件控制語句,實現自定義條件分組
- 條件控制語句中嵌套函數達到理想的計算效果
- 其他
舉例說明
*對已知的數據庫中數據,按照自己的邏輯,進行自定義分組和數據分析
*首先SD_GSS表中數據如下
| YYEAR | NO |
|---|---|
| 1992 | 2 |
| 1992 | 3 |
| 1992 | 4 |
| 2017 | 5 |
| 2017 | 6 |
| 2017 | 7 |
- 然后,擺出自己的邏輯,對主鍵進行邏輯定義,另外一個欄位不變,1992年定義為'生日年',2017年定義為'新年'
SELECT
CASE YYEAR
WHEN '1992'
THEN '生日年'
ELSE '新年'
END YYEAR
FROM
SD_GSS
-
結果如下
YYEAR 生日年 生日年 生日年 新年 新年 新年 -
用此條件控制語句,實現自定義條件分組
SELECT
CASE YYEAR
WHEN '1992'
THEN '生日年'
ELSE '新年'
END DATED,NO
FROM
SD_GSS
-
END結尾時,自定義欄位,其余部門和上述SQL一致DATED NO 生日年 2 生日年 3 生日年 4 新年 5 新年 6 新年 7 -
條件控制語句中嵌套函數達到理想的計算效果
SELECT
CASE YYEAR
WHEN '1992'
THEN ROUND(YYEAR/9,5)
ELSE YYEAR+100
END DATED,NO
FROM
SD_GSS
- 上面
SQL意思是,1992年,讓此主鍵除9,除不盡,用ROUND函數,小數點后保留5位,否則加100DATED NO 221.33333 2 221.33333 3 221.33333 4 2117 5 2117 6 2117 7
結合其他語言理解
- 很多人拿面相對象語言和建築做對比,
C語言是基礎,是面向對象語言基礎。拿C語言中的if..else..來對比case when then else end
if(YYEAR=='1992')
{
YYEAR=YYEAR/9.0;
}
else
{
YYEAR=YYEAR+100;
}
- 也可以用
if..else if...else if...else來類比case when then else end,結果可能不一致,但是思想大致一致,可以幫助你,快速理解
if(YYEAR=='1992')
{
YYEAR=YYEAR/9.0;
}
else if(YYEAR=='2017')
{
YYEAR=YYEAR+100;
}
else
{
YYEAR=YYEAR+100;
}
- 其他
- 視圖中,包括
Function和Procesure中都會有用到流程控制語句 - 數據更新也會用到
- 做后台開發實現復雜邏輯計算,很長的
SQL都會用到 - 當然,如果你真正理解了,可以把它結合到很復雜情況中
- 這里就不做過多介紹
- 視圖中,包括
小結
- 數據庫是一門功能很強大的語言,實現復雜的計算效果,和需求的實現,如果你的思維開了一個口子,想了解更多,那也請繼續探索。不登高山,不足以品平原之遼闊。
- 有機會說一說視圖,
Function和Procesure包括書寫規范,注意事項和調試(Debug)。
感激
星星之火可以燎原,今日點滴的付出,是日后的苦盡甘來。莫愁前路漫漫,天下誰人不識君。感謝你閱讀此文稿,也希望你能不吝賜教。推薦比較全面的個人學習網站,希望對你有幫助。
關於作者
var normalChild = {
nickName : "墨客碼",
site : "http://www.cnblogs.com/gss0525/"
descTarget : ".net后台開發者,熱衷分享技術,心懷感恩,深耕不綴。"
}
