CASE WHEN 条件赋值

执行查询,查询结果有一个字段的值,需要根据表中其他几个字段的值判断显示的内容。最后用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 的语句一次性把这两个步骤都实现了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FindBugs实践 1、 Bug级别 根据Bug可能导致的后果,FindBugs定义了若干Bug级别,主要的级别如下所示: Bad Practice: 不好的实践 Correctness: 正确性 Experimental Internationalization: Malicious code vulnerability: 存在漏洞的有害代码 Multithreaded correctness: 多线程正确性 Performance:性能 Security:安全 Dodgy: 欺骗性代码 2、 常见Bug以及处理办法 a) 不需要处理 May expose internal representation by incorporating reference to mutable object 描述:调用set方法,修改对象属性,被修改的对象属性是一个可变的对象; May expose internal representation by returning reference to mutable object 描述:调用get方法,获得对象属性,获得的对象属性是一个可变的对象; b) 建议处理 Dead store to local variable 描述:对一个局部变量赋值,但是这个局部变量可能不会被用到; 处理方式:确认此局部变量是否会被使用,如果确实不会被用到,请去掉; Exception is caught when Exception is not thrown 描述:调用的方法中不会抛出异常,但是调用方法的时候尝试使用try catch 捕获异常; 处理方式:确认此方法的调用会不会导致异常的发生,如果不会抛出异常请去 掉try catch,确认方法调用会不会抛出异常关键是对方法调用参数的合法 性进行检查,排除调用这个方法时可能抛出异常的参数; Unread field 描述:某个对象的属性不会被读取 处理方式:确认此局部变量是否会被使用,如果确实不会被用到,请去掉,和 Dead store to local variable一样处理,只是这里针对的是不是局部变量; Call to static DateFormat 描述:调用静态的DateFormat对象 处理方式:DateFormat对象是线程不安全的,建议不要使用静态的DateFormat,但是DateFormat不会被修改的话,也可以不用修改; Class is Serializable, but doesn't define serialVersionUID 描述:类是可序列化的,但是没有定义serialVersionUID; 处理方式:自动生成serialVersionUID; Field only ever set to null 描述:Field一直被设置为null; 处理方式:检查相关filed的调用情况,看所有对Field的操作是否都是将Field设置为null; Usage of GetResource may be unsafe if class is extended 描述:如果一个类被继承了,使用getResource可能会不安全 处理方式: Unsynchronized get method, synchronized set method 描述:非同步的get方法,同步的set方法 处理方式:修改为一致的情况 Unconditional wait 描述:无条件的wait 处理方式: Switch statement found where one case falls through to the next case 描述:switch语句中有case没有使用break; 处理方式: 增加break; Should be a static inner class 描述:应该是静态内部类; 处理方式: 增加static修饰符使其成为静态内部类; Private method is never called 描述:私有方法没有被调用; 处理方式:考虑将其注释掉;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值