`
datamachine
  • 浏览: 164061 次
社区版块
存档分类
最新评论

集算器协助SQL实现固定排序

    博客分类:
  • DB
阅读更多

SQL通常只能按某字段进行排序,如果要按照指定列表排序,就只能用decodeunion,但项目一多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_CodeDateInOut字段相同,BreakReturn字段不同。某人某天的考勤信息如下:



 

针对每人每天的考勤记录,需要按指定行号取出上午的4条数据,再静态转置成1条记录,上午下午分两次计算。此类有序算法在实际业务中很常见,但SQL缺乏天然的序号,只能用pivotover等方法去实现,虽然能写出代码,但很难看懂和维护。

 

集算器代码如下:



 

A3取出各组第1723条记录,A4将各组4条记录横向拼成1条记录,并存入空二维表AM,其中“~”表示当前组,“#”表示组内序号。“|”可进行记录纵向合并。

某人某天的计算结果如下:



 

  • 大小: 17.3 KB
  • 大小: 10.5 KB
  • 大小: 9.5 KB
  • 大小: 13.7 KB
  • 大小: 22.7 KB
  • 大小: 10.9 KB
  • 大小: 15.8 KB
  • 大小: 12.2 KB
  • 大小: 6.1 KB
  • 大小: 26.3 KB
  • 大小: 47.5 KB
  • 大小: 20.3 KB
3
1
分享到:
评论

相关推荐

    SQL Server分组排序取数据的实现

    本文将深入探讨如何在SQL Server中实现分组排序并获取每组的特定行数据。 首先,我们要理解分组的概念。在SQL中,`GROUP BY`语句用于将数据根据一个或多个列进行分类,例如在示例代码中,我们根据`A.DocNo`, `A1....

    帆软:排序问题(通过帆软设置或者sql排序)

    帆软报表作为一款强大的报表工具,提供了多种排序方式,既能通过界面配置实现,也能通过SQL查询语句进行控制。本篇将详细介绍如何在帆软中处理排序问题,以及如何结合SQL进行排序。 一、帆软报表界面设置排序 1. *...

    使用SQL实现的冒泡排序算法 mysql数据库

    在MySQL数据库中,通常我们不直接使用SQL来执行排序算法如冒泡排序,因为SQL是设计用来查询和操作数据的,而不是执行通用的计算或算法任务。然而,为了教学目的,我们可以尝试模拟冒泡排序的过程,但请注意这种方法...

    sql 按拼音首字母排序

    本文将深入探讨如何利用SQL实现按拼音首字母进行排序的功能,这是一个对于处理中文数据尤其有用的技术点。通过解析提供的代码片段,我们将了解其工作原理、适用场景以及可能的优化方向。 ### SQL拼音排序功能概述 ...

    SQL 关于记录排序 sqlserver

    根据提供的文件信息,我们可以深入探讨 SQL 服务器中的记录排序功能,特别是 `RANK()` 函数在 SQL Server 中的应用,以及如何在 Oracle 数据库中实现类似的功能。此外,我们还将涉及基于排序的操作,如更新(`UPDATE...

    修改SQL数据库排序规则修改表栏位排序规则

    修改SQL数据库排序规则修改表栏位排序规则 修改SQL数据库排序规则: 1.修改为单用户模式 2.然后关闭所有的查询窗口,修改Options的Collocation属性,如:Chinese_PRC_90_CI_AS 3.再修改为多用户模式 修改表栏位...

    C# SQL2005 分页排序存储过程

    本篇将深入探讨如何在C#中调用SQL Server 2005的存储过程来实现分页排序功能。 首先,我们需要理解什么是分页排序。分页是指将大量的数据分成多个小块(页),每次只显示其中一部分,让用户可以逐页浏览,避免一次...

    sql过滤和排序

    描述了oracle sql的过滤和排序功能, 对于初学者是个不错的选择

    SQL自定义排序

    在这种情况下,就需要通过SQL语句实现自定义排序,以满足特定的业务逻辑需求。 #### 二、自定义排序基本原理 自定义排序的核心在于使用特定的SQL语法来改变查询结果的顺序,而不依赖于表本身的排序规则。常见的实现...

    SqlParser C++实现的SQL语法解释器

    SqlParser是一款基于C++实现的SQL语法解释器,它的主要任务是解析SQL语句,将其转化为计算机可理解的形式,从而能够执行相应的数据库操作。在数据库系统中,SQL(Structured Query Language)是用于管理关系数据库的...

    SQL SERVER 字符集问题之一解决

    在本文中,我们将讨论 SQL SERVER 字符集问题之一解决方案,解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CS_AS" 之间的排序规则冲突。 一、问题背景 在 SQL SERVER 中,默认的字符集是 SQL_Latin1_...

    sql模糊查询并按匹配度排序

    ### SQL模糊查询并按匹配度排序 在数据库查询操作中,模糊查询是非常常见的一种需求,尤其是在需要处理大量数据且查询条件不确定的情况下。本篇文章将基于提供的SQL查询语句,详细介绍如何进行SQL模糊查询以及如何...

    SqlServer按中文数字排序

     按名称排序 并不能得到一二三四五六的顺序  select * from LiWei order by name  找到中文数字在'一二三四五六七八九十'的位置  select id,name,SUBSTRING(name,2,1) as 中文数字,charindex...

    自定义查询排序,适合于oracle,mySql,SqlServer,access等数据库

    在一次项目中,项目已经就快完了,需求有来了,要求要按指定的方式排序,通过id,时间等进行正排序,倒排序 ,我想了很多方式,都不能实现要求;我想通过存储过程也太麻烦了,也有可能实现不了,我还想用一次执行多...

    经典的分页、排序SQL 通用存储过程.rar

    本文将详细解析"经典的分页、排序SQL 通用存储过程"所涉及的知识点,并给出如何实现这样的存储过程。 首先,分页是数据库查询中的一种优化策略,用于限制每次查询返回的结果数量,从而避免一次性加载大量数据导致的...

    匹配+排序 的搜索引擎功能!sql模糊查询并按匹配度排序.txt

    sql模糊查询并按匹配度排序 ,实现 匹配+排序 的搜索引擎功能!!!!

    在sql中实现汉语拼音查询

    ### 在SQL中实现汉语拼音查询 #### 摘要 本文详细介绍了一种在SQL Server环境中通过利用SQL Server的排序规则来获取汉字拼音简码的方法。这种方法不仅能够减少操作员在查询过程中输入汉字的工作量,还能有效提升...

    用ADO实现数据库记录排序

    总结来说,用ADO实现数据库记录排序主要涉及Connection对象的建立、Command对象的SQL查询以及Recordset对象的Sort属性应用。掌握这些概念和操作,可以灵活地在各种数据库系统中进行数据的排序和管理,提升应用程序的...

    js实现SQL语句格式化(附ACE编辑器使用示例及效果)

    我们知道,在编辑SQL语句的时候,可以通过各种客户端软件对SQL语句进行格式化,但是我们如果想通过...这时我们可以借助sql-formatter.js插件来实现,具体参考Demo附件(可直接运行,内附ACE编辑器使用示例及效果)。

    SQL2000企业管理器绿色版

    这个"SQL2000企业管理器绿色版"是精简版或者便携式版本,无需安装即可使用,方便在不同环境或非固定工作台上快速启动数据库管理工作。 1. SQL Server 2000简介:SQL Server 2000是微软发布的一款关系型数据库管理...

Global site tag (gtag.js) - Google Analytics