六,在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 用法 Case 语句是 SQL 中一种强大的语句,用于根据不同的条件执行不同的操作。它可以用来实现复杂的逻辑操作,并且可以与其他 SQL 语句结合使用以实现更加复杂的查询。 SQL 中 Case 语句有两种格式:...
SQL中Case的使用方法 Case具有两种格式。简单Case函数和Case搜索函数。
当你想基于CASE表达式的返回值进行排序时,可以在ORDER BY子句中使用CASE。这使得你可以根据逻辑条件而非原始数据字段进行排序。在以下示例中,首先按价格范围排序,然后按书名排序。 ```sql SELECT CASE WHEN...
case语句 sql server case语句
CASE 表达式可以应用于 SQL Server 和 Windows Azure SQL Database 中的多种上下文,包括但不限于: - **SELECT 语句**: 在 SELECT 语句中使用 CASE 表达式可以根据不同的条件动态生成列值。 - **UPDATE 语句**: 在...
在进行SQL到Access SQL的转换过程中,一个重要的知识点是了解如何将SQL中的`CASE WHEN THEN`结构转换为Access中的等效表达式。在SQL中,`CASE WHEN THEN`是一种常用的条件表达式,用于根据不同的条件返回不同的值。...
在SQL Server中,可以使用`EXEC`或`sp_executesql`存储过程执行动态SQL。例如,当字段名、表名或数据库名作为变量时,需要使用动态SQL。需要注意的是,字符串前加上`N`表示该字符串是Unicode,如`N'select * from ...
### SQL语法的各种妙用 #### 一、动态执行SQL语句 在SQL中,我们可以使用动态执行SQL语句的方式来进行一些灵活的操作。这种方式通常适用于那些需要在运行时确定查询细节的情况。 **示例代码:** ```sql DECLARE ...
SQL__case_when_then_的用法
本文档介绍了SQL中case...when的用法。
### SQL语句妙用指导——SQL的便捷及巧妙用法详解 #### 一、动态SQL语句基础 在SQL编程中,动态SQL是指在运行时根据条件构建的SQL语句。这种方式非常灵活,尤其适用于需要根据不同的输入动态生成查询的情况。 **1...
在SQL查询中,`CASE WHEN`、`EXISTS`、`NOT EXISTS`以及`IN`和`NOT IN`是常用的操作符,它们用于处理复杂的条件判断和数据筛选。这些概念对于理解和编写高效的SQL语句至关重要,尤其是在数据分析和数据库管理中。 `...
在SQL语言中,可以使用Update表名Set字段名=case字段名when值1then值2else值三endFrom表名Where条件语句来实现条件语句的写法。 四、取余函数Mod() 在PB脚本中,可以使用Mod(要取余数的值,取余值)函数来实现取余数...
这个"SQL CASE及结构转换问题"的主题涉及到两个主要方面:`CASE`语句的使用以及如何处理SQL中的数据结构转换。 首先,让我们深入了解一下`CASE`语句。在SQL中,`CASE`可以被看作是编程语言中的if-else逻辑,用于...
### Delphi中SQL语句的使用总结 在Delphi中使用SQL语句是与数据库进行交互的重要手段之一。本文将详细介绍如何在Delphi环境中构造和执行SQL查询,并给出具体的示例来帮助理解。 #### 一、基本SQL查询的构建 在...
本篇文章将深入探讨SQL语句的一些妙用和详细用法,包括动态SQL、输出参数、Identity列的管理以及通用的SQL查询技巧。 1. 动态SQL: 动态SQL允许我们在运行时构建和执行SQL语句,这在处理动态生成的查询或变量作为...
在UPDATE语句中使用Case函数可以用来动态更新表中的数据: ```sql UPDATE Products SET Price = CASE WHEN Category = '电子' THEN Price * 0.9 WHEN Category = '书籍' THEN Price * 0.8 ELSE Price END WHERE ...