SQL---CASE WHEN条件表达式(conditional statement)

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

 

语法:

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

 

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

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

 

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 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 );

 

posted @ 2020-03-18 13:58  HuZihu  阅读(706)  评论(0)    收藏  举报