• Sql 基于列的Case表达式


    Case表达式可以用在 Select,update ,delete ,set,in,where ,order by,having子句之后,

    只是case表达式不能控制sql程序的流程,只能作为基于列的逻辑使用

    SELECT  TOP 4 CASE    a.Id 
            WHEN 1 THEN '骨性关节炎1'
            WHEN 2 THEN '骨性关节炎2'
            WHEN 3 THEN '骨性关节炎3'
            ELSE '不知道'
            END AS MyName
     FROM [dbo].[Disease] a 
    ORDER BY a.Id 

    也可以这样写:

    SELECT  TOP 4  MyName = CASE    a.Id 
            WHEN 1 THEN '骨性关节炎1'
            WHEN 2 THEN '骨性关节炎2'
            WHEN 3 THEN '骨性关节炎3'
            ELSE '不知道'
            END 
     FROM [dbo].[Disease] a 
    ORDER BY a.Id 

    case表达式分两种:
    简单表达式:将某个表达式与一组简单表达式进行比较以确定结果
    即:整个表达式只会取一列的值做相应的判断,
    搜索表达式:计算一组布尔表达式以确定结果

    上面的实例就是一个简单表达式

    注意:then 后面的数据类型必须相同或者兼容,否则会报错

    case搜索表达式:

     SELECT  CASE 
              WHEN r.[SystemName] = 'Administrators' THEN '管理员'
              WHEN r.[SystemName] = 'Registered' THEN 'APP注册用户'
              ELSE '不知道'
              END AS MyName
      
       FROM [dbo].[Role] r

    注意顺序:当第一个when后的表达式为true,则取第一个then后面的值,即使第二个when表达式也为true

    CASE表达式在ORDER BY中的使用:
    case表达式在order by 中可以将排序结果分类,使符合某些条件的行采用一种排序方式,符合另外另一种条件的行采用另一种排序方式

     DECLARE @beforeTime DATETIME
          SET  @beforeTime = DATEADD(MONTH,-1,GETDATE())  
          SELECT * FROM #result r  ORDER BY  
                                   CASE WHEN  r.CreatedOnUtc >= @beforeTime THEN r.HotCount END DESC ,
                                   CASE WHEN  r.CreatedOnUtc < @beforeTime THEN r.CreatedOnUtc END DESC

    注意:这里每一条规则都要单独写一个case表达式,因为case表达式是基于列的,一个case表达式只能返回一个值,所以基于多少个值排序,就需要多少个case表达式

  • 相关阅读:
    01-SCOTT-SQL建表语句
    面试小题
    Swagger2使用API
    Elasticsearch单机安装_集群搭建_索引基本操作_Head插件安装与基本操作_ik分词器配置_logstash实现数据同步_教程
    45个非常有用的 Oracle 查询语句小结
    oracle获取定时时间段
    彻底理解webservice SOAP WSDL
    MySQL 1045登录失败
    quartz定时任务时间设置
    map 遍历的四种方式
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5706788.html
Copyright © 2020-2023  润新知