`
liyuandong
  • 浏览: 331723 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL中Case的妙用(四)

SQL 
阅读更多

六,在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语法使用详解 在SQL查询语言中,`CASE`语句是一个非常重要的功能,它可以用来构建复杂的条件逻辑,实现对数据的灵活处理。本文将深入探讨SQL中的`CASE`语法及其应用场景。 #### 一、基本概念 `...

    SQL中Case语句用法讨论_BJ

    ### SQL中的Case语句深入解析 在SQL查询语言中,`Case`语句是一个非常强大的功能,用于在查询中执行条件判断,它可以根据不同的条件返回不同的结果,这使得SQL能够处理更加复杂的数据筛选和转换需求。`Case`语句有...

    SQL中case的使用

    SQL中Case的使用方法 Case具有两种格式。简单Case函数和Case搜索函数。

    sql数据库 转 Access SQL语句改写之 Case When Then When Then Else End

    在进行SQL到Access SQL的转换过程中,一个重要的知识点是了解如何将SQL中的`CASE WHEN THEN`结构转换为Access中的等效表达式。在SQL中,`CASE WHEN THEN`是一种常用的条件表达式,用于根据不同的条件返回不同的值。...

    SQLsevrer CASE用法

    ### SQL Server 中 CASE 表达式的深入解析与应用实例 #### 概述 在 SQL Server 数据库管理系统中,`CASE` 表达式是一种非常强大的工具,用于在查询语句中进行条件判断和数据处理。它允许用户根据指定的条件返回...

    sql妙用(绝妙的sql语句)

    在SQL Server中,可以使用`EXEC`或`sp_executesql`存储过程执行动态SQL。例如,当字段名、表名或数据库名作为变量时,需要使用动态SQL。需要注意的是,字符串前加上`N`表示该字符串是Unicode,如`N'select * from ...

    sql语法的各种妙用

    ### SQL语法的各种妙用 #### 一、动态执行SQL语句 在SQL中,我们可以使用动态执行SQL语句的方式来进行一些灵活的操作。这种方式通常适用于那些需要在运行时确定查询细节的情况。 **示例代码:** ```sql DECLARE ...

    SQL__case_when_then_的用法

    SQL__case_when_then_的用法

    sql中case语句的用法浅谈

    SQL中Case的使用方法 Case具有两种格式。简单Case函数和Case搜索函数。 代码如下:–简单Case函数 CASE sex  WHEN ‘1’ THEN ‘男’  WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END –Case搜索函数 CASE WHEN sex = ...

    sql case when exists not exists in not in

    在SQL查询中,`CASE WHEN`、`EXISTS`、`NOT EXISTS`以及`IN`和`NOT IN`是常用的操作符,它们用于处理复杂的条件判断和数据筛选。这些概念对于理解和编写高效的SQL语句至关重要,尤其是在数据分析和数据库管理中。 `...

    PB脚本中SQL语句写法与SQL中语句写法对照

    在SQL语言中,可以使用Update表名Set字段名=case字段名when值1then值2else值三endFrom表名Where条件语句来实现条件语句的写法。 四、取余函数Mod() 在PB脚本中,可以使用Mod(要取余数的值,取余值)函数来实现取余数...

    论SQL Server数据库中Case函数的作用.pdf

    在UPDATE语句中使用Case函数可以用来动态更新表中的数据: ```sql UPDATE Products SET Price = CASE WHEN Category = '电子' THEN Price * 0.9 WHEN Category = '书籍' THEN Price * 0.8 ELSE Price END WHERE ...

    四六级词汇SQL文件

    标题中的“四六级词汇SQL文件”表明这是一个与英语四六级考试相关的数据库,而数据库是用SQL(Structured Query Language)语言编写的。SQL是一种用于管理和处理关系数据库的标准编程语言,用于存储、检索、更新和...

    decode函数与case when 的妙用

    在阅读博客文章《decode函数与case when 的妙用》时,作者可能分享了一些具体的示例和使用技巧,帮助我们更好地理解和掌握这两种方法。通过学习和实践,我们可以将这些知识应用于日常的数据库操作,优化数据处理流程...

    sql 中 case when 语法使用方法

    在SQL语言中,`CASE WHEN`语句是一个非常强大的逻辑判断工具,它可以替代C语言中的`switch case`结构,提供灵活的数据处理和条件判断。在SQL查询中,`CASE WHEN`常常用于根据不同的条件返回不同的值,或者在`SELECT`...

    case乱码解决

    mysql 中case when 遇到乱码解决。查询语句中含有case引起中文乱码解决方法

    SQL Developer使用手册

    ### SQL Developer 使用手册知识点概述 #### 一、SQL Developer 简介 - **软件版本与发布日期*...通过深入学习 SQL Developer 的使用方法,开发者可以更好地利用这款工具提升工作效率,解决实际工作中遇到的各种挑战。

    SQL中的小数点后的四舍五入

    SQL中的小数点后的四舍五入,适合出入门的朋友,里面有详细的举例,一看即明白。

Global site tag (gtag.js) - Google Analytics