SQL---CASE表达式

CASE表达式是用来判断条件的,条件成立时返回某个值,条件不成立时返回另一个值。

语法:

CASE WHEN ... THEN ...

           WHEN ... THEN ...

           ELSE ... 

END

(注:各分支返回的数据类型需一致。)

(注:when子句一定要有排他性,因为当when子句为真时,剩余的when子句会被忽略。)

CASE
    WHEN ComparsionCondition THEN result
    WHEN ComparsionCondition THEN result
    ELSE other
 END

CASE表达式的用途:

1,转换现有的编码方式

例子:

student_name  score
Ming          80
Red           92
Huzi          100
Mung          60
student_name  score
Ming          良
Red           优
Huzi          优
Mung          中
SELECT student_name,
            (CASE WHEN score>=90 THEN ''
                      WHEN score<90 AND score>=75 THEN ''
                      WHEN score<75 AND score>=60 THEN ''
             ELSE '不及格' END) AS score
FROM Score;

2,构建交叉表

例子:

 Date     Result
 1900-1-11900-1-11900-1-11900-1-21900-1-2 胜
          胜  负
 1900-1-1 2   1
 1900-1-2 2   0
SELECT DISTINCT Date,
SUM(CASE WHEN Result='' THEN 1 ELSE 0 END) AS '',
SUM(CASE WHEN Result='' THEN 1 ELSE 0 END) AS ''
FROM Test
GROUP BY Date;

3,行列转换

product_type sum_price
clothes       5000
office        600
kitchen       10000
sum_price_clothes sum_price_office sum_price_kitchen
5000              600              10000
SELECT SUM(CASE WHEN product_type = '衣服' THEN sale_price
                ELSE 0 END) AS sum_price_clothes,
            SUM(CASE WHEN product_type = '办公用品' THEN sale_price
                ELSE 0 END) AS sum_price_office,
            SUM(CASE WHEN product_type = '厨房用品' THEN sale_price
                ELSE 0 END) AS sum_price_kitchen
FROM Product;

4,生成特定排序方式

例子:对下表按B、D、C、A的顺序进行排序

item x y z
A    1 2 3
B    5 5 2
C    4 7 1
D    3 3 8
SELECT item, x, y, z
FROM t
ORDER BY ( CASE WHEN item="B" THEN 1
                           WHEN item="D" THEN 2
                           WHEN item="C" THEN 3
                           WHEN item="A" THEN 4
                           ELSE NULL
                  END );

猜你喜欢

转载自www.cnblogs.com/HuZihu/p/12244794.html