六,在Case函数中使用合计函数
假设有下面一个表
学号(std_id)
|
课程ID(class_id)
|
课程名(class_name)
|
主修flag(main_class_flg)
|
100
|
1
|
经济学
|
Y
|
100
|
2
|
历史学
|
N
|
200
|
2
|
历史学
|
N
|
200
|
3
|
考古学
|
Y
|
200
|
4
|
计算机
|
N
|
300
|
4
|
计算机
|
N
|
400
|
5
|
化学
|
N
|
500
|
6
|
数学
|
N
|
有的学生选择了同时修几门课程(100,200)也有的学生只选择了一门课程(300,400,500)。选修多门课程的学生,要选择一门课程作为主修,主修flag里面写入 Y。只选择一门课程的学生,主修flag为N(实际上要是写入Y的话,就没有下面的麻烦事了,为了举例子,还请多多包含)。
现在我们要按照下面两个条件对这个表进行查询
1. 只选修一门课程的人,返回那门课程的ID
2. 选修多门课程的人,返回所选的主课程ID
简单的想法就是,执行两条不同的SQL语句进行查询。
条件1
--条件1:只选择了一门课程的学生
SELECT std_id, MAX(class_id) AS main_class
FROM Studentclass
GROUP BY std_id
HAVING COUNT(*) = 1;
执行结果1
STD_ID MAIN_class
------ ----------
300 4
400 5
500 6
条件2
--条件2:选择多门课程的学生
SELECT std_id, class_id AS main_class
FROM Studentclass
WHERE main_class_flg = 'Y' ;
执行结果2
STD_ID MAIN_class
------ ----------
100 1
200 3
如果使用Case函数,我们只要一条SQL语句就可以解决问题,具体如下所示
SELECT std_id,
CASE WHEN COUNT(*) = 1 --只选择一门课程的学生的情况
THEN MAX(class_id)
ELSE MAX(CASE WHEN main_class_flg = 'Y'
THEN class_id
ELSE NULL END
)
END AS main_class
FROM Studentclass
GROUP BY std_id;
运行结果
STD_ID MAIN_class
------ ----------
100 1
200 3
300 4
400 5
500 6
通过在Case函数中嵌套Case函数,在合计函数中使用Case函数等方法,我们可以轻松的解决这个问题。使用Case函数给我们带来了更大的自由度。
最后提醒一下使用Case函数的新手注意不要犯下面的错误
CASE col_1
WHEN 1 THEN 'Right'
WHEN NULL THEN 'Wrong'
END
在这个语句中When Null这一行总是返回unknown,所以永远不会出现Wrong的情况。因为这句可以替换成WHEN col_1 = NULL,这是一个错误的用法,这个时候我们应该选择用WHEN col_1 IS NULL。
CASE col_1
WHEN 1 THEN 'Right'
WHEN col_1 is NULL THEN 'Wrong'
END
分享到:
相关推荐
SQL中case语法的使用
SQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中Case语句用法讨论_BJSQL中...
详细介绍sql语句中case的用法,让大家更好地运用和学习。
SQL中Case的使用方法 Case具有两种格式。简单Case函数和Case搜索函数。
case语句 sql server case语句
sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用sql语法妙用...
CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE 子句中使用 CASE。本文将为大家介绍SQL Server中Case 的不同用法。
通过例子描述SQLserver中CASE的使用。
SQL__case_when_then_的用法
SQL中Case的使用方法 Case具有两种格式。简单Case函数和Case搜索函数。 代码如下:–简单Case函数 CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END –Case搜索函数 CASE WHEN sex = ...
CASE的用法 (Transact-SQL)
本文档介绍了SQL中case...when的用法。
sql数据库 转 Access SQL语句改写之 Case When Then When Then Else End!值得下载看看!资源免费,大家分享!! 更多免费资源 http://ynsky.download.csdn.net/
sql语句妙用.doc sql语句妙用.doc sql语句妙用.doc
1 case when 写法 2 sum case when 用法 3 select 拼接字段 示例如下: when 2 then 'C' else 'D' end ) as '类型',count(*) as '数量' from table group by orderType
sql语句绝妙用法,让你感到sql的精采与强大
sql 存储过程 常见的问题 自己用也可分享
sql语句妙用指导,里面包含SQL的便捷用法 一些巧妙的用法
Delphi中sql语句的使用总结 Delphi中sql语句的使用总结 Delphi中sql语句的使用总结