zoukankan      html  css  js  c++  java
  • T-SQL 基于列的逻辑表达式 (CASE)

      T-SQL 基于列的逻辑表达式 (CASE)

    测试数据:

    CREATE TABLE STU(
    ID INT NOT NULL PRIMARY KEY  IDENTITY(1,1),
    NAME NVARCHAR(20),
    SEX INT,
    REMARK NVARCHAR(100)
    )
    GO
    
    INSERT INTO STU VALUES('刘奇',1,'')
    INSERT INTO STU VALUES('刘红',0,'普通')
    INSERT INTO STU VALUES('张丽',0,'普通')
    INSERT INTO STU VALUES('刘院长',1,'')

     基本用法:

    因为CASE表达式的值只局限在一列当中,所以THEN后面的值数据类型必须相同

    --写法一
    SELECT ID,NAME,CASE SEX 
    WHEN 1 THEN ''
    WHEN 0 THEN ''
    ELSE 'QITA'
    END AS 性别
    FROM STU
    GO
    --写法二
    SELECT ID,NAME,性别=CASE    --注意这里的CASE后面不跟任何东西了
    WHEN SEX=1 THEN '男的'      --当然Sex你可以换成任意其他列
    WHEN SEX=0 THEN '女的'
    ELSE 'QITA'
    END
    FROM STU

    结果:

    多组合条件查询:

    SELECT ID,NAME,性别=CASE    
    WHEN SEX=1 AND ID=1 THEN '1号男嘉宾'      
    WHEN SEX=0 AND ID=2 THEN '2号女嘉宾'
    WHEN SEX=1 THEN '男的'      
    WHEN SEX=0 THEN '女的'
    ELSE 'QITA'
    END
    FROM STU
    /*
     结果:
    ID    NAME    性别
    1    刘奇    1号男嘉宾
    2    刘红    2号女嘉宾
    3    张丽    女的
    4    刘院长    男的
    */

    在实际开发中最常用的可能是这段代码:

    SELECT Id,Name,
      CASE 
      WHEN Score > 90 THEN '优秀'
      WHEN Score > 80 THEN '良好'
      WHEN Score > 70 THEN '中等'
      WHEN Score > 60 THEN '及格'
      ELSE '不及格'
      END AS 分数
      FROM Score

    这里要注意WHEN…THEN是以先后顺序出现,当第一个WHEN后面的表达式为FALSE时,则会去看第二个WHEN后的表达式,依次类推。当第一个WHEN后的表达式为TRUE时,则取第一个THEN后面的值,即使第二个WHEN表达式也为TRUE。

    CASE表达式在ORDER BY中的使用

    CASE表达式在ORDER BY中可以将排序结果分类,可以使符合一定条件则升序,符合另外一定条件则降序

    SELECT ID,NAME,SEX
    FROM STU
    ORDER BY
            CASE WHEN SEX=0 THEN ID END DESC, --性别为女的 根据ID 升序
            CASE WHEN SEX=1 THEN ID END ASC  -- 性别为男的 根据ID 降序
            
    /*
    ID    NAME    SEX
    3    张丽    0
    2    刘红    0
    1    刘奇    1
    4    刘院长    1
    */
  • 相关阅读:
    Vue-如何实现响应式
    Docker中mysql容器时区问题
    Django格式化日期时,抛出异常ValueError: embedded null byte
    前端报被CORS策略阻止,Django开启跨域解决
    DRF框架之认证、授权和登录
    Django之ALLOWED_HOSTS、LOGGING和多个子应用管理
    DRF框架生成接口文档
    DRF框架之自定义action
    DRF框架之视图集、Routers路由
    DRF框架之Concrete Generic Views
  • 原文地址:https://www.cnblogs.com/mc67/p/4874982.html
Copyright © 2011-2022 走看看