空值处理函数
ISNULL(expression,value) :如果expression不为空则返回expression,否则返回value。
SELECT ISNULL(FName,'佚名') as 姓名 FROM T_Employee
Case 函数用法
- (1)单值判断,相当于switch case
CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
ELSE defaultreturnvalue
END
T_Customer表
例子
select Fname, ( case Flevel when 1 then '普通客户' when 2 then '会员' when 3 then 'vip' else '游客' end ) as 客户类型 from T_Customer
- (2)相当于if…else…else….
CASE
WHEN condition1 THEN returnvalue1
WHEN condition 2 THEN returnvalue2
WHEN condition 3 THEN returnvalue3
ELSE defaultreturnvalue
END
例子:
练习1:
表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
练习2:
单号 金额
Rk1 10
Rk2 20
Rk3 -30
Rk4 -10
将上面的表输出为如下的格式:
单号 收入 支出
Rk1 10 0
Rk2 20 0
Rk3 0 30
Rk4 0 10
练习3:
有一张表T_Scores,记录比赛成绩
Date Name Score
2008-8-8 拜仁 胜
2008-8-9 奇才 胜
2008-8-9 湖人 胜
2008-8-10 拜仁 负
2008-8-8 拜仁 负
2008-8-12 奇才 胜
要求输出下面的格式:
Name 胜 负
拜仁 1 2
湖人 1 0
奇才 2 0
数据和参考答案见备注
注意:在中文字符串前加N,比如N’胜’
答案:
1.
select (case when a>b then a else b end),(case when b>c then b else c end ) from t
2.
select ID,(case when money <0 then 0 else money end) AS 收入,(case when money >0 then 0 else abs(money) end) as 支出 from T_Bill
3.
select Name,sum(case when score ='胜' then 1 else 0 end) as '胜',
sum(case when score = '负' then 1 else 0 end) as '负'
from T_bascketball
group by name