case.sql
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. --
  2. -- case.sql
  3. --
  4. -- Test the case statement
  5. --
  6. CREATE TABLE CASE_TBL (
  7.   i integer,
  8.   f double precision
  9. );
  10. CREATE TABLE CASE2_TBL (
  11.   i integer,
  12.   j integer
  13. );
  14. INSERT INTO CASE_TBL VALUES (1, 10.1);
  15. INSERT INTO CASE_TBL VALUES (2, 20.2);
  16. INSERT INTO CASE_TBL VALUES (3, -30.3);
  17. INSERT INTO CASE_TBL VALUES (4, NULL);
  18. INSERT INTO CASE2_TBL VALUES (1, -1);
  19. INSERT INTO CASE2_TBL VALUES (2, -2);
  20. INSERT INTO CASE2_TBL VALUES (3, -3);
  21. INSERT INTO CASE2_TBL VALUES (2, -4);
  22. INSERT INTO CASE2_TBL VALUES (1, NULL);
  23. INSERT INTO CASE2_TBL VALUES (NULL, -6);
  24. --
  25. -- Simplest examples without tables
  26. --
  27. SELECT '3' AS "One",
  28.   CASE
  29.     WHEN 1 < 2 THEN 3
  30.   END AS "Simple WHEN";
  31. SELECT '<NULL>' AS "One",
  32.   CASE
  33.     WHEN 1 > 2 THEN 3
  34.   END AS "Simple default";
  35. SELECT '3' AS "One",
  36.   CASE
  37.     WHEN 1 < 2 THEN 3
  38.     ELSE 4
  39.   END AS "Simple ELSE";
  40. SELECT '4' AS "One",
  41.   CASE
  42.     WHEN 1 > 2 THEN 3
  43.     ELSE 4
  44.   END AS "ELSE default";
  45. SELECT '6' AS "One",
  46.   CASE
  47.     WHEN 1 > 2 THEN 3
  48.     WHEN 4 < 5 THEN 6
  49.     ELSE 7
  50.   END AS "Two WHEN with default";
  51. --
  52. -- Examples of targets involving tables
  53. --
  54. SELECT '' AS "Five",
  55.   CASE
  56.     WHEN i >= 3 THEN i
  57.   END AS ">= 3 or Null"
  58.   FROM CASE_TBL;
  59. SELECT '' AS "Five",
  60.   CASE WHEN i >= 3 THEN (i + i)
  61.        ELSE i
  62.   END AS "Simplest Math"
  63.   FROM CASE_TBL;
  64. SELECT '' AS "Five", i AS "Value",
  65.   CASE WHEN (i < 0) THEN 'small'
  66.        WHEN (i = 0) THEN 'zero'
  67.        WHEN (i = 1) THEN 'one'
  68.        WHEN (i = 2) THEN 'two'
  69.        ELSE 'big'
  70.   END AS "Category"
  71.   FROM CASE_TBL;
  72. SELECT '' AS "Five",
  73.   CASE WHEN ((i < 0) or (i < 0)) THEN 'small'
  74.        WHEN ((i = 0) or (i = 0)) THEN 'zero'
  75.        WHEN ((i = 1) or (i = 1)) THEN 'one'
  76.        WHEN ((i = 2) or (i = 2)) THEN 'two'
  77.        ELSE 'big'
  78.   END AS "Category"
  79.   FROM CASE_TBL;
  80. --
  81. -- Examples of qualifications involving tables
  82. --
  83. --
  84. -- NULLIF() and COALESCE()
  85. -- Shorthand forms for typical CASE constructs
  86. --  defined in the SQL92 standard.
  87. --
  88. SELECT * FROM CASE_TBL WHERE COALESCE(f,i) = 4;
  89. SELECT * FROM CASE_TBL WHERE NULLIF(f,i) = 2;
  90. SELECT COALESCE(a.f, b.i, b.j)
  91.   FROM CASE_TBL a, CASE2_TBL b;
  92. SELECT *
  93.   FROM CASE_TBL a, CASE2_TBL b
  94.   WHERE COALESCE(a.f, b.i, b.j) = 2;
  95. SELECT '' AS Five, NULLIF(a.i,b.i) AS "NULLIF(a.i,b.i)",
  96.   NULLIF(b.i, 4) AS "NULLIF(b.i,4)"
  97.   FROM CASE_TBL a, CASE2_TBL b;
  98. SELECT '' AS "Two", *
  99.   FROM CASE_TBL a, CASE2_TBL b
  100.   WHERE COALESCE(f,b.i) = 2;
  101. --
  102. -- Examples of updates involving tables
  103. --
  104. UPDATE CASE_TBL
  105.   SET i = CASE WHEN i >= 3 THEN (- i)
  106.                 ELSE (2 * i) END;
  107. SELECT * FROM CASE_TBL;
  108. UPDATE CASE_TBL
  109.   SET i = CASE WHEN i >= 2 THEN (2 * i)
  110.                 ELSE (3 * i) END;
  111. SELECT * FROM CASE_TBL;
  112. UPDATE CASE_TBL
  113.   SET i = CASE WHEN b.i >= 2 THEN (2 * j)
  114.                 ELSE (3 * j) END
  115.   FROM CASE2_TBL b
  116.   WHERE j = -CASE_TBL.i;
  117. SELECT * FROM CASE_TBL;
  118. --
  119. -- Clean up
  120. --
  121. DROP TABLE CASE_TBL;
  122. DROP TABLE CASE2_TBL;