1、 IsNull和CASE WHEN 1、ISNULL 使用指定的替换值替换NULL。 语法 ISNULL(check_expression,replacement_value) 参数 check_expression 将被检查是否为NULL的表达式。 check_expression可以是任何类型的。 replacement_value 在check_expression为NULL时将返回的表达式。 replacement_value 必须与check_expresssion 具有相同的类型。 返回类型 返回与check_expression 相同的类型。 注
2、释 如果check_expression 不为NULL,那么返回该表达式的值;否则返回replacement_value。 示例 A.将ISNULL与AVG 一起使用 下面的示例查找所有书的平均价格,用值$10.00 替换titles 表的price 列中的所有NULL 条目。 USE pubs GO SELECT AVG(ISNULL(price, $10.00)) FROM titles GO 下面是结果集: -------------------------- 14.24 (1 row(s) affected) B. 使用ISNULL 下面
3、的示例为titles 表中的所有书选择书名、类型及价格。如果一个书名的价格是NULL,那么在结果集中显示的价格为0.00。 USE pubs GO SELECT SUBSTRING(title, 1, 15) AS Title, type AS Type, ISNULL(price, 0.00) AS Price FROM titles GO 下面是结果集: Title Type Price --------------- ------------ -------------------------- The Busy Execut business 1
4、9.99 Cooking with Co business 11.95 You Can Combat business 2.99 Straight Talk A business 19.99 Silicon Valley mod_cook 19.99 The Gourmet Mic mod_cook 2.99 The Psychology UNDECIDED 0.00 But Is It User popular_comp 22.95 Secrets of Sili popular_comp 20.00 Net Etiquette popular_comp
5、0.00 Computer Phobic psychology 21.59 Is Anger the En psychology 10.95 Life Without Fe psychology 7.00 Prolonged Data psychology 19.99 Emotional Secur psychology 7.99 Onions, Leeks, trad_cook 20.95 Fifty Years in trad_cook 11.95 Sushi, Anyone? trad_cook 14.99 (18 row(s) affected)
6、 2、SQL条件控制(case when...then...else...end) --1)在select 中使用 select count(*) as ct , CASE WHEN (Pro_state= 1) THEN '待审' WHEN (Pro_state= 2) THEN '已审' WHEN (Pro_state= 3) THEN '办理中' WHEN (Pro_state= 4) THEN '已申退' WHEN (Pro_state= 5) THEN '来信' WHEN (Pro_state= 6) THEN '办理完成' WHEN (Pro_state=
7、7) THEN '未予立案' end as pro_state from vw_proposals_query where 1=1 GROUP BY pro_state 结果: ct pro-state 30 办理中 7来信 1 办理完成 5 未予立案 解读: 查询总数和pro_state 当Pro_state= 1 时以'待审' 替代表示 当Pro_state= 2 时以'已审' 替代表示 当Pro_state= 3 时以'办理中' 替代表示 。。。。。。 --2)你可以在WHERE 子句中使用CASE。 首先让我们看一下CASE 的语法。在一般的SE
8、LECT 中,其语法如下:
SELECT
9、EN price BETWEEN 10 and 20 THEN 'Average' ELSE 'Gift to impress relatives' END FROM titles ORDER BY price GO 这是CASE 的典型用法,但是使用CASE 其实可以做更多的事情。 --3)GROUP BY 子句中的CASE: SELECT 'Number of Titles', Count(*) FROM titles GROUP BY CASE WHEN price IS NULL THEN 'Unpriced' WHEN price < 1
10、0 THEN 'Bargain' WHEN price BETWEEN 10 and 20 THEN 'Average' ELSE 'Gift to impress relatives' END GO 你甚至还可以组合这些选项,添加一个ORDER BY 子句,如下所示: USE pubs GO SELECT CASE WHEN price IS NULL THEN 'Unpriced' WHEN price < 10 THEN 'Bargain' WHEN price BETWEEN 10 and 20 THEN 'Average' ELSE '
11、Gift to impress relatives' END AS Range, Title FROM titles GROUP BY CASE WHEN price IS NULL THEN 'Unpriced' WHEN price < 10 THEN 'Bargain' WHEN price BETWEEN 10 and 20 THEN 'Average' ELSE 'Gift to impress relatives' END, Title ORDER BY CASE WHEN price IS NULL THEN 'Unpriced' WHEN price < 10 THEN 'Bargain' WHEN price BETWEEN 10 and 20 THEN 'Average' ELSE 'Gift to impress relatives' END, Title GO 注意,为了在GROUP BY 块中使用CASE,查询语句需要在GROUP BY 块中重复SELECT 块中的CASE 块。 除了选择自定义字段之外,在很多情况下CASE 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集。






