sql:当一列为空时取另一列(case when then)

在移动广告业务中,设备基本上分成两大阵营:安卓和ios,所以在设置设备库的时候一般都会有两个字段一个叫imei,对应ios的设备id则叫idfa。

当手机为安卓时,imei字段有值,idfa为空;当设备为ios时,idfa有值,imei为空。但当我们需要获取所有的设备id时则是所有的imei和idfa之和。

这样就会涉及到当imei字段为空时取idfa字段,当idfa字段为空时取imei字段,解决方法当然就是使用case,下面简单介绍一下然后进入实战:

参考资料:http://www.cnblogs.com/cyjch/archive/2012/03/21/2410794.html

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

这两种方式可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。


实战如下:

select sbid, act_type from (select case when imei is null then idfa else imei end as sbid,act_type,act_time from rela_load where act_type=52 or act_type=54 or act_type=55 or act_type=56 or act_type=57 order by act_time) d; 当imei是null的时候取idfa,否则取imei。
 

你可能感兴趣的:(sql)