SqlServer按照指定顺序对字段进行排序

本文介绍了一种使用SQL中的charindex函数来实现特定顺序排序的方法,并通过一个具体的例子展示了如何操作。但这种方法存在一定的局限性,当数据发生变化时可能无法达到预期效果。
部署运行你感兴趣的模型镜像

最近的一个项目,使用存储过程对报表进行分析,其中有一些名称需要根据指定顺序显示,而其名称对应的编号并不是按照要求的顺序排列的。通过上网查找资料,发现sql 中的charindex函数可以帮助解决这个问题。但是这样做也有一个弊端,当添加新的名称后,可能就会达不到想要的结果了,没有通用性。

给出一个例子: 

create table test(
 id1 varchar(10),
 id2 varchar(10),
 name varchar(20)
);
insert into test values('100','1001','
ccc');
insert into test values('100','1002','
bbb');
insert into test values('100','1003','
aaa');
insert into test values('101','1010','
fff');
insert into test values('101','1011','
ddd');
insert into test values('101','1012','eee');

查询语句:

select * from dbo.test order by id1 ,CHARINDEX(id2,'1011,1012,1010,1003,1002,1001,');

查询结果如图所示

附 charindex函数说明截自百度百科):

语法
CHARINDEX ( expression1 , expression2 , [ start_location ] )
参数
expression1
一个 表达式,其中包含要寻找的 字符的次序。 expression1 是一个短 字符 数据类型分类的 表达式
expression2
一个 表达式,通常是一个用于搜索指定序列的列。 expression2 属于字符串数据类型分类。
start_location
在  expression2 中搜索  expression1 时的起始 字符位置。如果没有给定  start_location,而是一个负数或零,则将从 expression2 的起始位置开始搜索。
返回类型
int


您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### 如何在 SQL Server 中按指定字段排序查询结果 #### 使用 `ORDER BY` 子句进行基本排序 为了对查询结果按照特定字段排序,最常用的方式是在 `SELECT` 语句中加入 `ORDER BY` 子句。此子句允许基于一个或多个列来排列数据行,并可分别设置升序 (`ASC`) 或降序 (`DESC`) 排序方向[^4]。 对于单个字段的简单排序操作如下所示: ```sql SELECT * FROM emp ORDER BY deptno DESC; ``` 这条命令会返回员工表中的所有记录并依据部门编号(`deptno`)做降序展示;当存在相同部门号时,默认情况下它们之间不会进一步排序除非指定了额外的关键字用于次级排序条件。 #### 实现多字段组合排序 有时需要根据多个属性共同决定最终显示顺序,则可以在 `ORDER BY` 后面连续列举所需考虑的因素及其各自的方向参数。例如下面这段代码实现了先依部门号码降序再按薪资水平升序的结果集构建过程: ```sql SELECT * FROM emp ORDER BY deptno DESC, sal ASC; ``` 值得注意的是,在声明复合型排序逻辑的时候要注意各部分之间的相对位置关系以及所期望达到的效果,因为这直接影响到最后呈现出来的列表形态。 #### 自定义序列下的精确控制——利用字符串匹配函数辅助完成特殊需求 针对某些应用场景下可能遇到的要求严格遵循给定名单内成员先后次序的情况(比如城市名称),可以通过调用内置文本处理方法如 `CHARINDEX()` 来间接达成目标。具体做法是将待检索项作为模式串去定位其在整个参照链里首次出现的位置索引值,以此数值大小为准来进行整体条目的编排工作[^2]。 这里给出一段示范性的脚本片段用来说明上述思路的实际应用方式: ```sql SELECT COUNT(city_name) AS city_count, city_name FROM tuan_info WHERE source_type = 1 AND city_name IN ('北京', '上海', '广州') GROUP BY city_name ORDER BY CHARINDEX(city_name, '北京,上海,广州'); ``` 通过这种方式能够确保输出的城市统计信息严格按照预先设定好的优先级队列展现出来,而不仅仅依赖于字母表自然序或其他默认机制所带来的不确定性因素影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值