加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

sql中的iif语句详解

(2010-11-25 14:35:31)
标签:

杂谈

(一)Access 数据库

大家知道在access中有iif函数,能将一个判断赋值序列简化成一个表达式,比如   
  iif(a>b,1,2),如果确实a>b那么结果给出1,否则就是2。这实在很方便。 

示例
(1)数字
   如果 Measures.CurrentMember 是空单元,则下面的示例返回 0,否则返回 1   
   IIf(IsEmpty(Measures.CurrentMember),   0,   1)   
 
(2)字符串   
   如果Measures.CurrentMember   是空单元,则下面的字符串返回字符串"Yes",否则返回字符串"No"   
   IIf(IsEmpty(Measures.CurrentMember),   "Yes",   "No")
 
    在Access中我可以用IIF函数进行统计汇总,比如,要知道实际应该交费的用户个数
   Access写法:Select sum(iif(金额>0, 1,0)) as num from 费用

   MS SQL写法:select sum(case when 金额>0 then 1 else 0 end) as num from 费用

 (二)Ms SQL 数据库

   IIF在SQL中是 case when ....then ...else...  end

例:select id,case when bz='1' then xx when bz='2' then yy else zz end as tt from xxx

这里我举个例子,有一个表政策法规表(policy_fgxx),有ID(主键)、bzh(标准号)、zynr(主要内容)、

fbrq(发布日期)四个字段

Select  * From policy_fgxx 结果:

 ID    bzh     zynr                    fbrq
13    001     <p>你好</p>      2010-05-07 0:00:00
15                                         NULL

 

我不想要上面的结果,我想要下面这个结果:

ID     bzh     zynr                   fbrq
13    001    <p>你好</p>      2010-05-07 0:00:00
15    无                                1990-06-06 0:00:00

也就是说,标准号为空的时候我想让它显示空,发布日期为null的时候我想让它显示我指定的日期

下面我给出写法,大家可以自己思考

Select id,zynr,
(case when bzh='' then '无' else bzh end) AS bzh,
(case when fbrq is null then '1982-06-02' else fbrq end) AS fbrq 
From policy_fgxx

  评论这张
转发至微博

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有