SQL通常只能按某字段进行排序,如果要按照指定列表排序,就只能用decode或union,但项目一多SQL就会很长,项目如果是变动的参数,SQL就更难实现,经常需要建立临时表。而且项目和字段值不一定相等,差异部分有时要补齐在排序结果中,有时要排除在外,用SQL处理起来难度很大。
集算器支持对齐函数、有序计算、显式集合,可轻松实现固定排序。集算器还支持独立使用、控制台执行、报表调用、JAVA代码调用,详情参考【集算器辅助SQL编写的应用结构】。
下面举例说明SQL开发中常见的固定排序问题,以及集算器的解法。
简单固定排序
对表Serice进行排序,要求aNum字段按照[1,3,2,4]的顺序排列,部分数据如下:
集算器代码:
A1执行SQL,函数align可将记录按指定列表分组并排序,默认只取第1条,@a表示取组内全部成员。函数conj可纵向合并记录。
<!--[if !supportLists]-->1. <!--[endif]-->可以用参数实现动态排序,即A2=A1.align@a(arg_List, aNum).conj(),当arg_List=[1,3,2,4]时,可获得同样的结果。如此便可实现代码复用。
当列表中的项目比aNum字段少时,比如arg_List=[1,2,4],默认情况下会排除无法对应的数据,计算结果如下:
如果希望将无法对应的数据追加在排序之后,可用A2=A1.align@n(arg_List, aNum).conj(),计算结果如下:
上述代码等价于A2=A1.align@s(arg_List, aNum)
<!--[if !supportLists]-->1. <!--[endif]-->当列表中的项目比字段值多时,排序结`果不会出现多余的项目。
按指定顺序输出
需要对库表PRODUCT重新排序并输出,但不是直接按字段排序,而是前N条数据根据指定顺序排序,剩下的数据按字段顺序排序。部分数据如下:
集算器代码:
align 表示按指定列表分组并排序,@s表示无法与列表对应的记录排在最后。当arg_IDList=[300,400,100,200]时,可获得理想结果。
寻找缺失数据
Table1记录较多,其ID字段是整数序列,但数据缺乏连续性,现在要找到这些缺少的数据。部分源数据如下:
如果集合较小,SQL可以用最小最大值生成连续的数字序列,再用子查询跟ID列做差集。如果集合较大,就要用归并算法提高性能,这种情况下代码就会变得很复杂。集算器直接支持归并算法,代码如下:
函数m可按序号取集合成员,支持正向取和逆向取,A1.m(1)可简写做A1(1)。函数to生成连续序列,函数merge可对有序数据进行归并,@d表示归并结果为差集。结果如下:
组内固定排序
表attendance记录着考勤信息,现在要将每人每天的考勤信息(固定7条)分为上午、下午2条,其中Per_Code、Date、In、Out字段相同,Break、Return字段不同。某人某天的考勤信息如下:
针对每人每天的考勤记录,需要按指定行号取出上午的4条数据,再静态转置成1条记录,上午下午分两次计算。此类有序算法在实际业务中很常见,但SQL缺乏天然的序号,只能用pivot,over等方法去实现,虽然能写出代码,但很难看懂和维护。
集算器代码如下:
A3取出各组第1、7、2、3条记录,A4将各组4条记录横向拼成1条记录,并存入空二维表AM,其中“~”表示当前组,“#”表示组内序号。“|”可进行记录纵向合并。
某人某天的计算结果如下:
相关推荐
此文档中详细的记载了,SQL Server分组排序取数据的实现,希望可以帮到下载的朋友们!
sql按拼音首字母排序,sql按拼音排序
帆软:排序问题(通过帆软设置或者sql排序) 测试文件 + sql 脚本
select * from t1 order by sign(A) desc,abs(A) asc
SQL用中文字段排序,默认是按拼音来排的。 MSSQL2005不是这样的,那么排序问题怎么解决呢? 很简单,加上我们希望根据什么来(拼音或者笔画)排序的排序规则就好了。
修改SQL数据库排序规则修改表栏位排序规则 修改SQL数据库排序规则: 1.修改为单用户模式 2.然后关闭所有的查询窗口,修改Options的Collocation属性,如:Chinese_PRC_90_CI_AS 3.再修改为多用户模式 修改表栏位...
C# SQL2005 分页排序存储过程 C# SQL2005 分页排序存储过程
描述了oracle sql的过滤和排序功能, 对于初学者是个不错的选择
雖然SQLserver有rank() over,Oracle卻沒有,而且以此為基本方法可以變化為多個相關的SQL,比如 update 更新,order by 排序 等等
内容:本章介绍SQL语句的条件查询和排序操作。 产品:Oracle 10g 技术:SQL语句、Sql*Plus 难度:★★☆☆☆
在报表开发工具FineReport中单数据集分页SQL实现层式报表
本篇文章是对SQL实现小计,合计以及排序进行了详细的分析介绍,需要的朋友参考下
在一次做项目的时候,项目已经做完了,...结果弄出来了,就一条sql语句就能实现,现在我把我的成果分享给大家,这自定义排序能够在oracle,MySql,SqlServer,access使用,我现在打包压缩分享给大家,希望你们能够喜欢。
sql文件查看器sql文件查看器sql文件查看器sql文件查看器sql文件查看器
按名称排序 并不能得到一二三四五六的顺序 select * from LiWei order by name 找到中文数字在'一二三四五六七八九十'的位置 select id,name,SUBSTRING(name,2,1) as 中文数字,charindex...
SQL语句实现按关健字模糊查询,并按匹配度排序
SQL Query 通用排序,适用与任何排序,只需要传参数就可以实现。属于本人原创。请支持。
排序函数(sqlserver) 在各种处理中应用排序规则的示例 排序规则在拼音处理中的应用 排序规则在全角与半角处理中的应用.sql .......
在一次项目中,项目已经就快完了,需求有来了,要求要按指定的方式排序,通过id,时间等进行正排序,倒排序 ,我想了很多方式,都不能实现要求;我想通过存储过程也太麻烦了,也有可能实现不了,我还想用一次执行多...
sql模糊查询并按匹配度排序 ,实现 匹配+排序 的搜索引擎功能!!!!