当前位置: 服务支持 >  技术文档 >  MySQL中CASE表达式的行标记用法

MySQL中CASE表达式的行标记用法

阅读数 92
点赞 52
copyright 著作权
article_banner

备注:测试数据库版本为MySQL 8.0

如需要scott用户下建表及录入数据语句,可参考:
scott建表及录入数据sql脚本

一.需求

把一列中的值(如EMP表中的JOB列)映射成一列“布尔”标记。

例如,希望如下返回:
+--------+----------+----------+--------+------------+---------+
| ename | is_clerk | is_sales | is_mgr | is_analyst | is_prez |
+--------+----------+----------+--------+------------+---------+
| KING | 0 | 0 | 0 | 0 | 1 |
| SCOTT | 0 | 0 | 0 | 1 | 0 |
| FORD | 0 | 0 | 0 | 1 | 0 |
| JONES | 0 | 0 | 1 | 0 | 0 |
| BLAKE | 0 | 0 | 1 | 0 | 0 |
| CLARK | 0 | 0 | 1 | 0 | 0 |
| ALLEN | 0 | 1 | 0 | 0 | 0 |
| WARD | 0 | 1 | 0 | 0 | 0 |
| MARTIN | 0 | 1 | 0 | 0 | 0 |
| TURNER | 0 | 1 | 0 | 0 | 0 |
| SMITH | 1 | 0 | 0 | 0 | 0 |
| ADAMS | 1 | 0 | 0 | 0 | 0 |
| JAMES | 1 | 0 | 0 | 0 | 0 |
| MILLER | 1 | 0 | 0 | 0 | 0 |
+--------+----------+----------+--------+------------+---------+

这样的结果集可用于调试,它能够提供一个不同于其他典型结果集的数据视图。

二.解决方案

对每个雇员的JOB使用CASE表达式,并返回1或0表示他的JOB。
需要为每个可能的职位写一个CASE表达式,并创建一列:

select  ename,
        case when job = 'CLERK'
             then 1 else 0
        end as is_clerk,
        case when job = 'SALESMAN'
             then 1 else 0
        end as is_sales,
        case when job = 'MANAGER'
             then 1 else 0
        end as is_mgr,
        case when job = 'ANALYST'
             then 1 else 0
        end as is_analyst,
        case when job = 'PRESIDENT'
             then 1 else 0
        end as is_prez
  from  emp
 order  by 2,3,4,5,6;

测试记录:

mysql> select  ename,
    ->         case when job = 'CLERK'
    ->              then 1 else 0
    ->         end as is_clerk,
    ->         case when job = 'SALESMAN'
    ->              then 1 else 0
    ->         end as is_sales,
    ->         case when job = 'MANAGER'
    ->              then 1 else 0
    ->         end as is_mgr,
    ->         case when job = 'ANALYST'
    ->              then 1 else 0
    ->         end as is_analyst,
    ->         case when job = 'PRESIDENT'
    ->              then 1 else 0
    ->         end as is_prez
    ->   from  emp
    ->  order  by 2,3,4,5,6
    -> ;
+--------+----------+----------+--------+------------+---------+
| ename  | is_clerk | is_sales | is_mgr | is_analyst | is_prez |
+--------+----------+----------+--------+------------+---------+
| KING   |        0 |        0 |      0 |          0 |       1 |
| SCOTT  |        0 |        0 |      0 |          1 |       0 |
| FORD   |        0 |        0 |      0 |          1 |       0 |
| JONES  |        0 |        0 |      1 |          0 |       0 |
| BLAKE  |        0 |        0 |      1 |          0 |       0 |
| CLARK  |        0 |        0 |      1 |          0 |       0 |
| ALLEN  |        0 |        1 |      0 |          0 |       0 |
| WARD   |        0 |        1 |      0 |          0 |       0 |
| MARTIN |        0 |        1 |      0 |          0 |       0 |
| TURNER |        0 |        1 |      0 |          0 |       0 |
| SMITH  |        1 |        0 |      0 |          0 |       0 |
| ADAMS  |        1 |        0 |      0 |          0 |       0 |
| JAMES  |        1 |        0 |      0 |          0 |       0 |
| MILLER |        1 |        0 |      0 |          0 |       0 |
+--------+----------+----------+--------+------------+---------+
14 rows in set (0.00 sec)
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空