经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
case when
来源:cnblogs  作者:Simona'  时间:2019/6/4 15:41:04  对本文有异议
  1. 1 --CASE 具有两种格式:
  2. 2 --(1)简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。
  3. 3 --(2)CASE 搜索函数计算一组布尔表达式以确定结果。两种格式都支持可选的 ELSE 参数。
  4. 4
  5. 5 --语法
  6. 6 --简单 CASE 函数:
  7. 7
  8. 8 --CASE input_expression
  9. 9 -- WHEN when_expression THEN result_expression
  10. 10 -- [ ...n ]
  11. 11 -- [
  12. 12 -- ELSE else_result_expression
  13. 13 -- END
  14. 14
  15. 15 --CASE 搜索函数:
  16. 16
  17. 17 SELECT CASE StatusValue
  18. 18 WHEN '0' THEN (SELECT TOP 1 字段名 FROM work)
  19. 19 WHEN '1' THEN (SELECT TOP 1 字段名 FROM Notice) END
  20. 20 FROM CommonStatusDict;
  21. 21
  22. 22
  23. 23 CREATE TABLE tb (id INT,
  24. 24 class VARCHAR); --class种类就只有三种,如果不固定就需要存储过程来实现
  25. 25 INSERT tb
  26. 26 SELECT 1,
  27. 27 'a'
  28. 28 UNION ALL
  29. 29 SELECT 1,
  30. 30 'a'
  31. 31 UNION ALL
  32. 32 SELECT 1,
  33. 33 'b'
  34. 34 UNION ALL
  35. 35 SELECT 1,
  36. 36 'c'
  37. 37 UNION ALL
  38. 38 SELECT 2,
  39. 39 'a'
  40. 40 UNION ALL
  41. 41 SELECT 2,
  42. 42 'b'
  43. 43 UNION ALL
  44. 44 SELECT 2,
  45. 45 'b';
  46. 46 SELECT *
  47. 47 FROM tb;
  48. 48
  49. 49 --想查找出按id分组得到的 a ,b ,c 的数量
  50. 50 -- 如下
  51. 51 --id a b c
  52. 52 --1 2 1 1
  53. 53 --2 1 2 0
  54. 54
  55. 55
  56. 56 SELECT id,
  57. 57 a = SUM(CASE class
  58. 58 WHEN 'a' THEN 1
  59. 59 ELSE 0 END),
  60. 60 b = SUM(CASE class
  61. 61 WHEN 'b' THEN 1
  62. 62 ELSE 0 END),
  63. 63 c = SUM(CASE class
  64. 64 WHEN 'c' THEN 1
  65. 65 ELSE 0 END)
  66. 66 FROM tb
  67. 67 GROUP BY id;

 

  1.  

 

原文链接:http://www.cnblogs.com/Metor9527/p/10972241.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号