【网学网提醒】:网学会员为广大网友收集整理了,SQL中Case的语法,希望对大家有所帮助!
SQL中Case的语法
case两种格式:两种格式:
简单Case函数CASEsexWHEN‘1’THEN‘男’WHEN‘2’THEN‘女’ELSE‘其他’ENDCase搜索函数CASEWHENsex=’1’THEN‘男’WHENsex=’2’THEN‘女’ELSE‘其他’END注意:1)Case函数只返回第一个符合条件的值,剩下的Case部分将会自动忽略例如:CASEWHENcol_1IN(‘a’,’b’)THEN‘第一类’WHENcol_1IN(‘a’)THEN‘第二类’ELSE‘其他’END2)casewhen:case(switch)里的那个when必须是数值型的
Case函数用途:函数用途:
已知数据按照另外一种方式分组:已知数据按照另外一种方式分组:
根据这个国家人口数据,统计亚洲和北美洲的人口数量。根据这个国家人口数据,统计亚洲和北美洲的人口数量。1)国家表结构(Table_A):
2)
表中数据:
3)
Sql代码(case1.sql):
SELECTSUM(population),CASEcountryWHEN1THEN'亚洲'WHEN9THEN'亚洲'WHEN6THEN'亚洲'WHEN2THEN'北美洲'WHEN3THEN'北美洲'WHEN8THEN'北美洲'ELSE'其他'ENDFROMTable_AGROUPBYCASEcountryWHEN1THEN'亚洲'WHEN9THEN'亚洲'WHEN6THEN'亚洲'WHEN2THEN'北美洲'WHEN3THEN'北美洲'WHEN8THEN'北美洲'ELSE'其他'END;
4)
结果:
根据工资来判断等级,并统计每一等级的人数。根据工资来判断等级,并统计每一等级的人数。1)工资表结构(Table_B):
2)
表中数据:
3)
Sql代码(case2.sql):
selectcasewhensalary<=500then'1'whensalary>500andsalary<=600then'2'whensalary>600andsalary<=800then'3'whensalary>800andsalary<=1000then'4'elsenullendsalay_class,count(*)fromTable_Bgroupbycasewhensalary<=500then'1'whensalary>500andsalary<=600then'2'whensalary>600andsalary<=800then'3'whensalary>800andsalary<=1000then'4'elsenullend;
4)
结果:
用一个SQL语句完成不同条件的分组:语句完成不同条件的分组:
1)国家性别表结构(Table_C):
2)
表中数据:
3)
Sql代码(case3.sql):
selectcountry,SUM(casewhensex='1'thenpopulationelse0end),---男性人口SUM(casewhensex='2'thenpopulationelse0end)--女性人口fromTable_Cgroupbycountry;
4)
结果:
根据条件有选择的UPDATE::
例如:例如:以如下条件更新1.工资5000以上的职员,工资减少10%。2.工资在2000到4600之间的职员,工资增加15%1)职员工资表:
2)
表中数据:
3)
Sql代码(case4.sql):
updateTable_Dsetsalary=casewhensalary>=5000thensalary*0.9whensalary>=2000andsalary<4600thensalary*1.15elsesalaryend;
4)
结果:
交换主键:交换主键:1)交换表结构(Table_E):
2)
表中数据:
3)
Sql代码(case5.sql):
updateTABLE_Esetp_key=casewhenp_key=1then2whenp_key=2then1elsep_keyendwherep_keyin(1,2);
4)
结果:
两个表数据是否一致的检查:两个表数据是否一致的检查:
Case函数不同于DECODE函数。在Case函数中,可以使用
BETWEEN,LIKE,IS,NULL,IN,EXISTS等等。比如说使用IN,EXISTS,可以进行子查询,从而实现更多的功能。
例子:有两个表tab_A,tab_B,两个表中都有keyCol列。现在我们对这两个表进行比较,tab_A中的keyCol列的数据如果再tab_B的keyCol列的数据中可以找到,返回结果’Matcched’,如果没有找到,返回结果’Unmatched’。1)两个表的结构(tbl_A,tbl_B)Tbl_A:
Tbl_B:
2)
表中数据:Tbl_A:
Tbl_B:
3)
Sql代码:a)In代码(case6.sql):
selectkeyCol,casewhenkeyColin(selectkeyColfromtbl_B)then'Matched'else'Unmatched'endLabelfromtbl_A;
b)
Exists代码(case7.sql):
selectkeyCol,whenexists(select*fromtbl_Bwheretbl_A.Keycol=tbl_B.Keycol)then'Matched'else'Unmatched'endLabelfromtbl_A;
4)
结果:a)In结果:
b)
Exists结果:
函数中使用合计函数:在Case函数中使用合计函数:
例题:有的学生选择了同时修几门课程(100,,200)也有的学生只选择了一门课程(300,400,500)。选修多门课程的学生,要选择一门课程作为主修,主修flag里面写入Y。只选择一门课程的学生,主修flag为N。现在我们按照下面两个条件对这个表进行查询1.2.只选修一门课程的人,返回那门课程的ID选修多门课程的人,返货所选的主课程ID1)学生—课程表结构(Studentclass):
2)
表中数据:
3)
Sql代码(case8.sql):
selectstd_id,casewhenCOUNT(*)=1---只选择一门课程的学生的情况thenMAX(class_id)elseMAX(casewhenmain_class_flag='Y'thenclass_idelsenullend)endasmain_classfromStudentclassgroupbystd_id;
4)
结果: