Case具有两种格式。简单Case函数和Case搜索函数。
--简单Case函数
CASE sex
WHEN '' THEN '男'
WHEN '' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '' THEN '男'
WHEN sex = '' THEN '女'
ELSE '其他' END
这两种方式,可以实现相同的功能。
简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
两者中可以根据不同的需求来选择。
CASE WHEN LEN(OHA.Code) > 0 THEN OHA.Code + '-' ELSE '' END + OHA.Name AS [Text]
- OHA.Code的长度大于0时,Text字段的值为OHA.Code + '-' + OHA.Name
- OHA.Code的长度=0时,Text字段的值为OHA.Name
col1 col2
1 aaa
2 bbb
3 ccc
select
case
when
col1 = 1
then
'北京'
when
col1 = 2
then
'上海'
else
'广州'
end
col1,
col2 from
tabA
如果col1为1,则显示为北京,col1为2,则显示为上海
从stud_grade表中查询所有同学考试成绩情况,凡成绩为空者输出“未考”、小于60分输出“不及格”、60分至70分输出“及格”、70分至90分输出“良好”、大于或等于90分时输出“优秀”。
SELECT stud_id,name,score=CASE WHEN grade IS NULL THEN ’未考’
WHEN grade<60 THEN ’不及格’
WHEN grade>=60 AND grade<70 THEN ’及格’
WHEN grade>=70 AND grade<90 THEN ’良好’
WHEN grade>=90 THEN ’优秀’
END
FROM stud_grade
总结:相对于对表中的值进行字典翻译功能