在where条件中使用CASE WHEN 语句

CREATE TABLE TB_Test_Report
(
id  int identity,
stateid int,
userid  int,
username varchar(64)
)

go

INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (20,1,‘a‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,2,‘b‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (20,2,‘b‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,‘a‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,‘a‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,3,‘c‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,3,‘c‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (20,1,‘c‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,‘a‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (10,1,‘A‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (30,1,‘a‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (30,1,‘b‘)
INSERT INTO TB_Test_Report (stateid,userid,username) VALUES (30,1,‘c‘)
go

/**
 已知语句 select * from TB_Test_Report where stateid in (10,20)
 要求在语句后面增加条件(加入 and  或者 or  或者 表达式)
 查询出,所有stateid =10 和 (stateid=20 并且userid = 2) 的记录
 */

SELECT *
FROM   TB_Test_Report
WHERE  stateid IN ( 10, 20 )
       AND ( CASE
               WHEN stateid = 20
                    AND userid <> 2 THEN 0
               ELSE 1
             END ) = 1

此类问题关键在于

  1. CASE WHEN 可以用于WHERE
  2. CASE WHEN 中可以使用AND 进行逻辑判断
  3. CASE WHEN 表达式最终由返回值
时间: 2024-10-11 16:56:24

在where条件中使用CASE WHEN 语句的相关文章

sql中的case when语句

1.在where子句中: 1 CREATE TABLE `hello`.`sometbl` ( 2 3 `id` INT NOT NULL AUTO_INCREMENT , 4 5 `a` VARCHAR(45) NULL , 6 7 `b` VARCHAR(45) NULL , 8 9 `c` VARCHAR(45) NULL , 10 11 PRIMARY KEY (`id`) , 12 13 UNIQUE INDEX `id_UNIQUE` (`id` ASC) ); 1 INSERT I

【语法】SQL中的case when then else end用法-解决一个字段根据条件取不同值

Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 这两种方式,可以实现相同的功能.简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式. 还有一个需要

hive中使用case、if:一个region统计业务(hive条件函数case、if、COALESCE语法介绍:CONDITIONAL FUNCTIONS IN HIVE)

前言:Hive ql自己设计总结 1,遇到复杂的查询情况,就分步处理.将一个复杂的逻辑,分成几个简单子步骤处理. 2,但能合在一起的,尽量和在一起的.比如同级别的多个concat函数合并一个select 也就是说,字段之间是并行的同级别处理,则放在一个hive ql:而字段间有前后处理逻辑依赖(判断.补值.计算)则可分步执行,提前将每个字段分别处理好,然后进行相应的分步简单逻辑处理. 一. 场景:日志中region数据处理(国家,省份,城市) select city_id,province_id

浅谈Shell脚本中for循环、while循环及case分支语句

博文目录一.for循环语句二.使用while循环语句三.使用case分支语句 一.for循环语句 当面对各种列表重复任务时,使用简单的if语句已经难以满足要求,而顺序编写全部代码更是显得异常繁琐,困难重重.这将可以使用for循环语句很好的解决类似问题. 1.for语句的结构 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环.在这里,"取值列表"称为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定(如通

shell中的case语句

shell中case语法如下: case word in pattern1) Statement(s) to be execute if pattern1 matchs ;; pattern2) Statement(s) to be execute if pattern2 matchs ;; pattern3) Statement(s) to be execute if pattern3 matchs ;; *) Default action ;; esac [注]pattern模式不能包含元字

在switch中的case语句中声明变量会被提前

原文链接:http://my.oschina.net/u/2000201/blog/514384 本人今天在编写工具类时,无意之间发现,在Java的Swith语句的case语句中声明局部变量时出现了一个奇怪的问题. 废话少说,先列出例子,一看便知. 情景一:case 1中声明变量x,case 2中不能再声明变量x switch (1) { case 1: int x = 1; break; case 2: int x = 2;// 编译器会提示:Duplicate local variable

sql中case when语句的使用

case when语句有两种格式:简单case函数和搜索case函数. --简单Case函数CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女'ELSE '其他' END--Case搜索函数CASE WHEN sex = '1' THEN '男'WHEN sex = '2' THEN '女'ELSE '其他' END 这两种方式,可以实现相同的功能.简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式. 还有一个需要注意

JavaScript对于switch语句中的case后键入值的带不带引号

一.用switch选择星期几 这时case为  例:case="星期一" 二.用switch选择单纯的数字 这时case为  例:case='1' 三.用switch选择一个应用了函数的值 例:switch(preseInt(grade/10)){ case=6: document.write("该同学成绩为中") } 请问case后面的引号什么时候加,什么时候不加有具体的分类么 第一次写,希望大神可以指点一下,后日必深入研究

Oracle中是用case...when语句进行判断

使用case...when语句进行判断,其语法格式如下: case<selector> when<expression_1> then pl_sqlsentence_1; when<expression_2> then pl_sqlsentence_2; ... when<expression_n> then pl_sqlsentence_n; [else plsql_sentence;] end case; 具体例子如下: declare v_season