zoukankan      html  css  js  c++  java
  • SQL语句自定义排序

    需求

      从订单表中查数据,并且按照Status字段1,3,4,2,排序

    分析

      按照orderby Status方法,不管ASC还是DESC达不到目的。

      可以用case when函数,但是case when的可维护性是比较差的,客户说按1,4,3,2排序,或者添加两个5,6,就要调整case when的顺序,容易出错。

      SQL中有个函数charindex(exp1,exp2),功能就是判断exp1在exp2中的位置,如果不存在则返回0,类似js或者.net中的indexof函数

      那么就可以迂回实现,Status字段就是exp1,客户需求的1342就是exp2,这样就是返回Status在1342中的位置,从而实现排序,而且,客户想修改排序规则,只需要修改exp2中的字符串即可,维护性比case when大大提升。

    代码

    SELECT CHARINDEX(RTRIM(CAST(Status as NCHAR)),'1,3,4,2') as RowNumber,* FROM Orders ORDER BY CHARINDEX(RTRIM(CAST(Status as NCHAR)),'1,3,4,2')

    注意

      严谨的说,使用这种方法需要加一个where语句,判断status在(1,3,4,2)中

  • 相关阅读:
    springdataJpa对无主键表或视图查询的支持
    Blynk系列随笔
    arduino系列文章
    Debezium系列随笔
    Kafka系列随笔
    SSAS 收藏
    Saiku 系列
    Mondrian系列
    数据仓库理论学习
    加密解密
  • 原文地址:https://www.cnblogs.com/oooo0/p/6233382.html
Copyright © 2011-2022 走看看