电脑技术学习

sql中的iif语句详解

dn001
IIf
返回由逻辑测试确定的两个数值或字符串值之一。

语法
数字
IIf(«LogicalExpression»,«NumericExpression1»,«NumericExpression2»)

如果«LogicalExpression»取值为TRUE,则此函数返回«NumericExpression1»,否则,返回«NumericExpression2»。

字符串
IIf(«LogicalExpression»,«StringExpression1»,«StringExpression2»);

如果«LogicalExpression»取值为TRUE,则此函数返回«StringExpression1»,否则,返回«StringExpression2»。

注释
只有当«LogicalExpression»的值为零时,才认为该表达式是FALSE。任何其它值都被解释为TRUE。
不推荐用Iif函数基于搜索条件创建成员的集合。请改用Filter函数根据逻辑表达式评估指定集合中的每个成员,然后返回成员的子集合。

示例
数字
如果Measures.CurrentMember是空单元,则下面的示例返回0,否则返回1:
IIf(IsEmpty(Measures.CurrentMember),0,1)

字符串
如果Measures.CurrentMember是空单元,则下面的字符串返回字符串"Yes",否则返回字符串"No":
IIf(IsEmpty(Measures.CurrentMember),"Yes","No")

在Access中我可以用IIF函数进行统计汇总,比如,要知道实际应该交费的用户个数:
Select sum(iif(金额>0, 1,0)) as num from 费用
在SQL Server中好像没有对应的函数,我用:
select sum(case when 金额>0 then 1 else 0 end) as num from 费用
好像不太直观,不知道有没有其它方法

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
那MID,LEFT等呢?在SQL中怎么用?
MID就是SQL里的substring
LEFT就是SQL里的LEFT
比如substring(字段,开始位置,取多少长度)
left(字段,取多少长度)

SUBSTRING(expression,start,length);;
参数
expression;;;
是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。

start
是一个整数,指定子串的开始位置。

length;;;;
是一个整数,指定子串的长度(要返回的字符数或字节数)。


LEFT
返回从字符串左边开始指定个数的字符。

语法
LEFT(character_expression,integer_expression);;

参数
character_expression

字符或二进制数据表达式。character_expression可以是常量、变量或列。character_expression必须是可以隐式地转换为varchar的数据类型。否则,请使用CAST函数显式转换character_expression。

integer_expression;;;;
是正整数。如果integer_expression为负,则返回空字符串。

返回类型
varchar