执行查询,查询结果有一个字段的值,需要根据表中其他几个字段的值判断显示的内容。最后用CASE WHEN 语句实现。
具体的情况是 表中涉及有 SFFG , HFYDZPZMJ,WFYDZMJ,QTYDZMJ等字段。
HFYDZPZMJ,WFYDZMJ,QTYDZMJ,三个字段的值如果有两个为0,那SFFG的值要为 “否”,其他情况为“是”。
补充 CASE WHEN 用法
总的来说,CASE WHEN 通过新建一个字段,将表中的其他满足一定条件的数据转换成我们需要的数据,放在一个字段中,常见的用法有以下几种:
(1)简单CASE 函数
简单搜索函数适用于条件比较简单的查询,语句结构是:
CASE 字段名
WHEN 字段值 THEN 需要的值
WHEN 字段值 THEN 需要的值
ELSE 其他值(可以给定的一个固定值,也可以是字段) END
假如有一个lsyd表,nd字段值为1,2,3,4
select
case nd
when '1' then 'a'
when '2' then 'b '
else 'c' end
from lsyd (这里将其他值统赋了一个值c)
如果需要将结果字段重命名,只要在 end 后加上 AS 字段名 即可。
select
case nd
when '1' then 'a'
when '2' then 'b '
else nd end
from lsyd
(这里将其他值还是取原有的nd值)
(2)CASE 搜索函数
CASE 搜索函数,适用于条件相对复杂的情况,语句结构是:
CASE
WHEN 条件 THEN 需要的值
WHEN 条件 THEN 需要的值
ELSE 其他值(可以给定的一个固定值,也可以是字段) END
本文开头就是用CASE搜索函数的一个例子。
(3)CASE WHEN 分组函
CASE WHEN 分组函适用于更复杂的一种查询,往往还需要配合GROUP BY 一起使用。
假如我有以下一张表,需要在一张表里展示各个村水田、旱地、公路用地的面积,这时候就要用CASE WHEN 分组函数
可以用CASE WHEN 和GROUP BY 语句一次性得到想要的结果
SELECT
QSDWMC,
SUM( CASE WHEN DLMC ='水田' THEN TBMJ ELSE 0 END) AS 水田,
SUM( CASE WHEN DLMC ='旱地' THEN TBMJ ELSE 0 END) AS 旱地,
SUM( CASE WHEN DLMC ='公路用地' THEN TBMJ ELSE 0 END) AS 公路用地
FROM DLTB
GROUP BY QSDWMC
其实里面具体的包含了两个过程
SELECT
QSDWMC,DLMC,TBMJ,
CASE WHEN DLMC ='水田' THEN TBMJ ELSE 0 END AS 新建水田,
CASE WHEN DLMC ='旱地' THEN TBMJ ELSE 0 END AS 新建旱地,
CASE WHEN DLMC ='公路用地' THEN TBMJ ELSE 0 END AS 新建公路用地
FROM DLTB WHERE QSDWMC='七姜村'
第一步 是用CASE WHEN 新建三个字段,将符合条件的面积赋值进去,
然后再对结果,用GROUP BY 进行分组求和。
SELECT
QSDWMC,
SUM(新建水田) AS 水田 ,
SUM(新建旱地) AS 旱地,
SUM(新建公路用地) AS 公路用地
FROM 结果表
GROUP BY QSDWMC
熟练的话,就是用前面的那段包含CASE WHEN 和GROUP BY 的语句一次性把这两个步骤都实现了。