请选择 进入手机版 | 继续访问电脑版

悍铭论坛

 找回密码
 立即注册
查看: 474|回复: 0

SQL中Case的使用方法(二)

[复制链接]

54

主题

255

帖子

422

积分

县令

Rank: 3Rank: 3

积分
422
发表于 2016-6-25 18:07:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

二,用一个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,这个公司有个规定,女职员的工资必须高于块。如果用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 )





女职员的条件倒是符合了,男职员就无法输入了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|悍铭论坛 ( 滇ICP备13006366号-1 )

GMT+8, 2018-11-13 01:51 , Processed in 0.057241 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表