关于sqlserver的where如何添加判断类语句的一种想法(只包含两个判断分支)
其实这种想法我认为已经烂大街了,但是我要写下来记住。
例子:求每月上半月与下半月的营业额,上半月取上半月的值下半月取整个月的值(15号为界限),依据当天日期属于哪个半月,展示上边个月的值还是整个月的值
前言
关于sql语句里的where条件有时需要动态的判断使用什么条件,其实可以在取值后进行二次筛查。
但是我不想使用其他编程语言进行二次筛查,我的想法就是使用sql一次完成结果,我用过case when
但是不是很适合我,出现了‘>’附近有错误的问题。
正题
于是我想到了用变量,使用类型为bit的变量(因为sqlserver没有bool类型,bool就是布尔类型)。
大体思路:
1.先创建布尔类型变量,进行判断当天属于哪个半月,从而赋值1或0
2.在where内写好两种半月的不同取值范围括起来再or
3.将变量与两种取值范围and(根据实际情况)
大概代码:
DECLARE @flag BIT
if 判断为上个月的条件
set @flag=1
else 判断为下个月的条件
set @flag=0
select sum(money) from 表
where
(@flag=1 and (上个月的取值范围))
or
(@flag=1 and (下个月的取值范围));
当然这个例子可能有更好的解决方法,但是这个例子我是为了演示想出来的,当然有比这个更好的方法希望能够评论一下。