关于 case when then end 过滤列数据的查询

 

当我要查询一个地址簿信息的时候,碰到了详细地址在数据库中由省、市、县以及详细街道组成,需要将其连接为一个字段,此时将多列用 +  号连接即可,但此时出现地址如:“北京市 市辖区 东城区 **街道”,但实际上我们想显示的是“北京市 东城区 **街道,所有必须当碰到市级出现“市辖区”或者“县”时,则过滤为空“” ,于是,SQL语句应写为:

 

select b.id,b.name,(p.ProvinceName+ (case when  c.CityName ='市辖区' then ''
when  c.CityName ='县' then ''  end)+
cu.CountyName+b.detailAddress) as detailAddress,
b.companyName,b.postcode,b.mobilePhone,b.companyPhone,b.otherPhone,b.email,b.qq,b.remark
from Book b, Province p, City c, County cu
where p.ProvinceID= b.provinceId and c.CityID= b.cityId and cu.CountyID = b.countyId

 

 

注意,上面的语句只适应于SQL server  、 orcal 等,而小型的Access、MySQL却不能识别 case when then end  关键字,所有在使用此类小型数据库的时候必须作如下更改,得到相同效果

 


select b.id, b.name,
(p.ProvinceName + (iif(c.CityName='市辖区' or c.CityName='县','',c.CityName))
+ cu.CountyName + b.detailAddress) as detailAddress,
 b.companyName,b.postcode,b.mobilePhone,b.otherPhone,b.email,b.qq,b.remark
from Book b, Province p, City c, County cu 
where p.ProvinceID = b.provinceId and c.CityID = b.cityId and cu.CountyID = b.countyId

 

------------------------------------------------------------------------------------------------------------

 

IIf   函数   
         
  取决于表达式的计算结果,返回两部分之一。  
   
  语法  
   
  IIf(expr,   truepart,   falsepart)  
   
  IIf   函数语法具有以下命名参数:  
   
  部分   说明    
  expr   必选。要计算的表达式。    
  truepart   必选。在   expr   为   True   时返回的值或表达式。    
  falsepart   必选。在   expr   为   False   时返回的值或表达式。    
   
   
  说明  
   
  IIf   总是同时计算   truepart   和   falsepart,即使只返回这两者之一。因此,应注意意外的副作用。例如,如果计算   falsepart   会导至除以零的错误,则即使   expr   为   True,也会发生错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值