SQL Case When Then 条件判别csdn - 牛牛娱乐

SQL Case When Then 条件判别csdn

2019-02-12 08:21:20 | 作者: 海逸 | 标签: 函数,条件,运用 | 浏览: 4870

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

例如:

SELECT     id, name, cj, (CASE WHEN cj 60 THEN 不及格 WHEN cj BETWEEN 60 AND 90 THEN 杰出 WHEN cj 90 THEN 优异 END) AS 状况
FROM   stud

 


这两种方法,能够完结相同的功用。简略Case函数的写法相对比较简练,可是和Case查找函数比较,功用方面会有些约束,比方写判别式。
还有一个需求留意的问题,Case函数只回来第一个契合条件的值,剩余的Case部分将会被主动疏忽。
比方说,下面这段SQL,你永久无法得到“第二类”这个成果
CASE WHEN col_1 IN ( a, b) THEN 第一类
         WHEN col_1 IN (a)       THEN 第二类
ELSE其他 END

下面咱们来看一下,运用Case函数都能做些什么事情。

一,已知数据依照别的一种方法进行分组,剖析。

有如下数据:(为了看得更清楚,我并没有运用国家代码,而是直接用国家名作为Primary Key)
国家(country) 人口(population)
我国 600
美国 100
加拿大 100
英国 200
法国 300
日本 250
德国 200
墨西哥 50
印度 250

依据这个国家人口数据,计算亚洲和北美洲的人口数量。应该得到下面这个成果。
洲 人口
亚洲 1100
北美洲 250
其他 700

想要处理这个问题,你会怎么做?生成一个带有洲Code的View,是一个处理方法,可是这样很难动态的改动计算的方法。
假如运用Case函数,SQL代码如下:
SELECT  SUM(population),
        CASE country
                WHEN 我国     THEN 亚洲
                WHEN 印度     THEN 亚洲
                WHEN 日本     THEN 亚洲
                WHEN 美国     THEN 北美洲
                WHEN 加拿大  THEN 北美洲
                WHEN 墨西哥  THEN 北美洲
        ELSE 其他 END
FROM    Table_A
GROUP BY CASE country
                WHEN 我国     THEN 亚洲
                WHEN 印度     THEN 亚洲
                WHEN 日本     THEN 亚洲
                WHEN 美国     THEN 北美洲
                WHEN 加拿大  THEN 北美洲
                WHEN 墨西哥  THEN 北美洲
        ELSE 其他 END;

相同的,咱们也能够用这个方法来判别薪酬的等级,并计算每一等级的人数。SQL代码如下;
SELECT
        CASE WHEN salary = 500 THEN 1
             WHEN salary 500 AND salary = 600  THEN 2
             WHEN salary 600 AND salary = 800  THEN 3
             WHEN salary 800 AND salary = 1000 THEN 4
        ELSE NULL END salary_class,
        COUNT(*)
FROM    Table_A
GROUP BY
        CASE WHEN salary = 500 THEN 1
             WHEN salary 500 AND salary = 600  THEN 2
             WHEN salary 600 AND salary = 800  THEN 3
             WHEN salary 800 AND salary = 1000 THEN 4
        ELSE NULL END;

二,用一个SQL句子完结不同条件的分组。

有如下数据
国家(country) 性别(sex) 人口(population)
我国 1 340
我国 2 260
美国 1 45
美国 2 55
加拿大 1 51
加拿大 2 49
英国 1 40
英国 2 60

依照国家和性别进行分组,得出成果如下
国家 男 女
我国 340 260
美国 45 55
加拿大 51 49
英国 40 60

一般情况下,用UNION也能够完结用一条句子进行查询。可是那样添加耗费(两个Select部分),并且SQL句子会比较长。
下面是一个是用Case函数来完结这个功用的比如
SELECT country,
       SUM( CASE WHEN sex = 1 THEN
                      population ELSE 0 END),  男性人口
       SUM( CASE WHEN sex = 2 THEN
                      population ELSE 0 END)   女人人口
FROM  Table_A
GROUP BY country;

这样咱们运用Select,完结对二维表的输出方式,充沛显现了Case函数的强壮。

三,在Check中运用Case函数。

在Check中运用Case函数在许多情况下都是十分不错的处理方法。可能有许多人底子就不必Check,那么我主张你在看过下面的比如之后也测验一下在SQL中运用Check。
下面咱们来举个比如
公司A,这个公司有个规则,女职工的薪酬有必要高于1000块。假如用Check和Case来体现的话,如下所示
CONSTRAINT check_salary CHECK
           ( CASE WHEN sex = 2
                  THEN CASE WHEN salary 1000
                        THEN 1 ELSE 0 END
                  ELSE 1 END = 1 )

假如单纯运用Check,如下所示
CONSTRAINT check_salary CHECK
           ( sex = 2 AND salary 1000 )

女职工的条件却是契合了,男职工就无法输入了。

 

Select top 100 State,JoinState, 

(case when State=1 and Joinstate=0 then 2 when State=1 and JoinState=1 then 1 else 0 end) as usestate from UserInfo

(2)

select      ID,Username,namer=(case when(score =50)    then 实习

                                    when(score 50  and  score =500 )   then 赤脚医生    

                                    when(score 500  and score =1000 )   then 村卫生员 

                                    when(score 1000  and score =1500 )   then 乡卫生员 

                                    when(score 1500  and score =2000 )   then 镇卫生员

                                    when(score 2000  and score =3000 )   then 医生

                                    when(score 3000  and score =5000 )   then 主治医生

                                    when(score 5000  and score =10000 )   then 副主任医生

                                    when(score 10000  and score =20000 )   then 主任医生

                                    when(score 20000  and score =50000 )   then 健康大使

                                    else   健康大使  end ), (SELECT count(id)

         FROM  jk01_YiWen_Question 

         WHERE  UserID =  dbo.jk01_Member.ID)  as  questionnum 

   from  jk01_Member

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表牛牛娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章