- 1 --CASE 具有两种格式:
- 2 --(1)简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。
- 3 --(2)CASE 搜索函数计算一组布尔表达式以确定结果。两种格式都支持可选的 ELSE 参数。
- 4
- 5 --语法
- 6 --简单 CASE 函数:
- 7
- 8 --CASE input_expression
- 9 -- WHEN when_expression THEN result_expression
- 10 -- [ ...n ]
- 11 -- [
- 12 -- ELSE else_result_expression
- 13 -- END
- 14
- 15 --CASE 搜索函数:
- 16
- 17 SELECT CASE StatusValue
- 18 WHEN '0' THEN (SELECT TOP 1 字段名 FROM work)
- 19 WHEN '1' THEN (SELECT TOP 1 字段名 FROM Notice) END
- 20 FROM CommonStatusDict;
- 21
- 22
- 23 CREATE TABLE tb (id INT,
- 24 class VARCHAR); --class种类就只有三种,如果不固定就需要存储过程来实现
- 25 INSERT tb
- 26 SELECT 1,
- 27 'a'
- 28 UNION ALL
- 29 SELECT 1,
- 30 'a'
- 31 UNION ALL
- 32 SELECT 1,
- 33 'b'
- 34 UNION ALL
- 35 SELECT 1,
- 36 'c'
- 37 UNION ALL
- 38 SELECT 2,
- 39 'a'
- 40 UNION ALL
- 41 SELECT 2,
- 42 'b'
- 43 UNION ALL
- 44 SELECT 2,
- 45 'b';
- 46 SELECT *
- 47 FROM tb;
- 48
- 49 --想查找出按id分组得到的 a ,b ,c 的数量
- 50 -- 如下
- 51 --id a b c
- 52 --1 2 1 1
- 53 --2 1 2 0
- 54
- 55
- 56 SELECT id,
- 57 a = SUM(CASE class
- 58 WHEN 'a' THEN 1
- 59 ELSE 0 END),
- 60 b = SUM(CASE class
- 61 WHEN 'b' THEN 1
- 62 ELSE 0 END),
- 63 c = SUM(CASE class
- 64 WHEN 'c' THEN 1
- 65 ELSE 0 END)
- 66 FROM tb
- 67 GROUP BY id;
-