BEGIN
#前提:指定字符串长度为8字符定长
#逻辑:循环8次,比对2个字符串相同索引位置下的数值大小,并取结果最大值。
#示例:merge1(输入参数source1,输入参数source2,输出结果result)
#注意:输入参数必须是8位字符串
    set @cindex=1;
    set result='';
    WHILE @cindex<9 DO
        set @temp1=SUBSTR(source1,@cindex,1)+0;
        set @temp2=SUBSTRING(source2,@cindex,1)+0;
        IF @temp1>@temp2 THEN
            set result=CONCAT(result,@temp1);
            set @cindex=@cindex+1;
        ELSEIF @temp1=@temp2 THEN
            set result=CONCAT(result,@temp1);
            set @cindex=@cindex+1;
        ELSEIF @temp1<@temp2 THEN
            set result=CONCAT(result,@temp2);
            set @cindex=@cindex+1;
        END IF;
    END WHILE;
END

这个过程是用来 合并 2个 8为varchar类型字符串的

参数 见截图
BEGIN
DECLARE hasDone INT DEFAULT FALSE;
DECLARE missionIDValue VARCHAR(8);
DECLARE missionIDdata VARCHAR(8);
DECLARE groupNameCur CURSOR FOR SELECT missionID from a where a.groupName=groupNames;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET hasDone = TRUE;
set missionIDValue='00000000';
set missionIDdata='00000000';
OPEN groupNameCur;
  read_loop: LOOP
    FETCH groupNameCur INTO missionIDdata;
    IF hasDone THEN
      LEAVE read_loop;
    END IF;
        call merge1(missionIDValue,missionIDdata,missionIDValue);
        SELECT missionIDdata,missionIDValue;
  END LOOP;
CLOSE groupNameCur;
SELECT groupNames;
UPDATE a set other=missionIDValue where a.groupName=groupNames;
END
这个函数是用来  把分组数据进行逐条合并的。它需要一个 分组名称
然后根据分组名称去循环调用 merge1 函数,并把最终结果更新到同组数据的 other 列中

BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE groupNameValue VARCHAR(8);
    DECLARE groupNameCur CURSOR FOR SELECT DISTINCT groupName from a;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    OPEN groupNameCur;
  read_loop: LOOP
    FETCH groupNameCur INTO groupNameValue;
    IF done THEN
      LEAVE read_loop;
    END IF;
    CALL autoMergeGroup(groupNameValue);
  END LOOP;
    CLOSE groupNameCur;    
END
这个是自动化合并的入口函数。它负责对数据进行分组,并循环调用 autoMergeGroup 过程,就是上面的存储过程。

程序在执行时,只需要调用这个存储过程就可以了,就能做到:先把数据分组,再循环每组执行。在每组执行中,循环查询每条数据,把当前条和参考值'00000000'最合并操作
 
这是a表执行结果截图
varchar类型,必须提供长度,否则  就无法检验到底问题出在那里

自动分组+合并完整的sql脚本的更多相关文章

  1. 如何用SQL脚本在SQL Server Replication中创建合并复制,以及怎么创建分区合并复制

    假设我们要创建合并复制的发布端数据库是EFDemo其中有四张表,订阅端数据库是EFDemoSubscription,如下图所示: 首先创建发布端快照代理Sql agent job:"EFDe ...

  2. SQL脚本去重分组统计

    需求:首先有一张表记录学生姓名.科目和成绩,然后模拟插入几条数据,脚本如下: create table score ( Name ),--姓名 subject ),--科目 grade int--成绩 ...

  3. Spring Boot中自动执行sql脚本

    说明:所有的代码基于SpringBoot 2.0.3版本 背景 在应用程序启动后,可以自动执行建库.建表等SQL脚本.下文中以要自动化执行people.sql脚本为例说明,脚本在SpringBoot工 ...

  4. flyway实现java 自动升级SQL脚本

    flyway实现java 自动升级SQL脚本 为什么要用Flyway 在日常开发中,我们经常会遇到下面的问题: 自己写的SQL忘了在所有环境执行: 别人写的SQL我们不能确定是否都在所有环境执行过了: ...

  5. sqlserver2008数据库自动备份的sql脚本及使用bat命令执行脚本

    -----sql脚本 declare @fileName varchar(255) ,--定义备份文件名变量         @dbname varchar(255)--定义备份数据库名变量decla ...

  6. MySQL学习之路(1):SQL脚本语言

    使用MySQL数据库,首先安装MySQL数据库,本文所有SQL脚本在MySQL上测试和执行. 安装Mysql服务器:安装Mysql workbench客户端,可以以图形化界面管理mysql:安装php ...

  7. 数据库优化方案之SQL脚本优化

    随着数据库数据越来越大,数据单表存在的数据量也就随之上去了,那么怎么样让我们的脚本查询数据更快呢? 在这个地方我们主要提到两个数据库类型: 1.MSSQL(该数据库我们通过执行计划来查看数据库性能在哪 ...

  8. jdbc在mysql下一次执行多条sql脚本

    默认连接mysql的时候一次只能执行一条sql.要批量执行sql需要在jdbcUrl中增加“allowMultiQueries=true”参数,完整jdbcUrl如下:  jdbc:mysql://l ...

  9. access生成sql脚本,通过VBA调用ADOX

    access生成sql脚本,通过VBA调用ADOX. 使用 MS Access 2016 的VBA,读取mdb文件中的所有表结构(数据类型/长度/精度等),生成对应的SQL create table语 ...

随机推荐

  1. 表单元素的submit()方法和onsubmit事件(转)

    1.表单元素中出现了name="submit"的元素 2.elemForm.submit();不会触发表单的onsubmit事件 3.动态创建表单时遇到的问题 表单元素拥有subm ...

  2. 使用VisualVM分析tomcat运行状况(1)

    VisualVM是一款java程序性能分析与调优工具,而且还是jdk中自带的工具之一. tomcat也是一个java程序,自然也可以用它来进行监控.不过这里还是会有些问题,tomcat有两种常用的期待 ...

  3. Http请求 post get

    package com.sprucetec.tms.utils; import org.slf4j.Logger;import org.slf4j.LoggerFactory; import java ...

  4. Oracle触发器(trigger):view,schema,database

    视图trigger, instead of 我们知道如果一个view只是由一个table构成,那在view上做啥操作没太多限制.如果view是由多个table组成那在view上做啥unpdate,in ...

  5. ANDROID自己定义视图——onLayout源代码 流程 思路具体解释

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简单介绍: 在自己定义view的时候.事实上非常easy.仅仅须要知道3步骤: 1.測量- ...

  6. 反射,得到Type引用的三种方式

    1.使用System.Object.GetType()得到Type引用 使用一个SportsCar实例得到类型信息 SportsCar sc=new  SportsCar(); Type t=sc.G ...

  7. Node.js笔记3

    ###Node.js核心模块 1. 全局对象 Node.js中能够访问到的都是global的属性 **process它用于描述当前 Node.js 进程状态的对象,提供了一个与操作系统的简单接口.** ...

  8. Node.js笔记2

    入门二 5. 事件 Node.js中所有的异步I/O操作完成时都会发送一个事件到事件队列. Events 事件模块 `events.EventEmitter` 简单用法: var EventEmitt ...

  9. ASPxGridView后台获取edit、delete、选择框等按钮。

    GridViewCommandColumn commandColumn = (GridViewCommandColumn)ASPxGridViewInstance.Columns["#&qu ...

  10. Codeigniter-实现权限认证

    两种方法 钩子函数 集成核心Controller 方法一,钩子函数: 一直没找到CI的权限认证扩展,以前好像找到过一个老外的扩展,不过不怎么好用,现在记不清了,后来仿着jsp firter的方式用CI ...