。。。。
分类: SQLServer
2013-07-26 18:00:59
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 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集。 语法:
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
在简单的CASE表达式中,ORACLE会搜索expr 等于comparison_expr的第一对when then,然后返回return_expr.如果没有满足条件的when then 并且存在ELSE子句,那么ORACLE会返回else_expr,否则会返回空值。
您不能为所有这些return_expr和else_expr指定文字的NULL。
但我试了一下, 表
Id AGE
- ----------
1 20
1 22
2 10
2 200
3 30
3 40
SQL> select id,age,case id when '1' then 'aaa' when '2' then 'bbb' else NULL end from test;
结果
I AGE CAS
- ---------- ---
1 20 aaa
1 22 aaa
2 10 bbb
2 200 bbb
3 30
3 40