自动分组+合并完整的sql脚本

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 @[email protected]+1;
        ELSEIF @[email protected] THEN
            set result=CONCAT(result,@temp1);
            set @[email protected]+1;
        ELSEIF @temp1<@temp2 THEN
            set result=CONCAT(result,@temp2);
            set @[email protected]+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类型,必须提供长度,否则  就无法检验到底问题出在那里

时间: 2024-10-13 01:11:16

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

SQL脚本去重分组统计

需求:首先有一张表记录学生姓名.科目和成绩,然后模拟插入几条数据,脚本如下: create table score ( Name nvarchar(20),--姓名 subject varchar(20),--科目 grade int--成绩 ); insert into score(name,subject,grade) values('张三','语文',100); insert into score(name,subject,grade) values('张三','数学',90); inse

Spring Boot使用——项目启动自动执行sql脚本

背景 在项目上线前,需要提供一批测试数据到数据库,数据需求是:每次修改缺陷重启项目后,测试数据会初始化成最初的数据 核心思想 在SpringBoot的架构中,DataSourceInitializer类可以在项目启动后初始化数据,我们可以通过自动执行自定义sql脚本初始化数据.通过自定义DataSourceInitializer Bean就可以实现按照业务要求执行特定的脚本. 使用 前提:项目数据源配置完成 方法 通过@Configuration.@Bean和@Value三个注解实现自定义Dat

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

-----sql脚本 declare @fileName varchar(255) ,--定义备份文件名变量         @dbname varchar(255)--定义备份数据库名变量declare mycursor cursor fast_forward for select name from master..sysDatabases order by name --定义一个游标对象 open mycursor --打开游标set @dbname='pysf'set @fileName

.net(C#)在Access数据库中执行sql脚本

自己写的一个工具类,主要是业务场景的需要. 主要有两个功能: ①执行包含sql语句的字符串 ②执行包含sql语句的文件 调用方式 1 /// <summary> 2 /// 执行sql语句 3 /// </summary> 4 /// <param name="sql">需要执行的sql语句</param> 5 public bool ExecuteSql(string sql, ref string errorMsg) 6 { 7 Se

PowerDesigner生成sql脚本

1.打开PowerDesigner->New Project; 2.填写项目名称,选择文件的存放路径: 3.新建一个模型,New Model: 4.选择概念模型,填写模型名称: 5.选择entity,创建实体模型: 6.点击模型图,填写表结构信息: 时间类型的数据格式说明: 对于创建过程中出现相同字段的情况处理: 更改前: 更改后: 7.将表结构创建完成后,进行表之间的关联,点击relationship将表与表直接关联起来: 选择表与表之间的关系: 8.生成物理模型图: 选择数据库类型 软件会自

去掉PowerDesigner生成SQL脚本中字段名带的引号

使用PowerDesigner生成数据库建表SQL脚本时,尤其是Oracle数据库时,表名一般会带引号.其实加引号是PL/SQL的规范,数据库会严格按照""中的名称建表,如果没有"",会按照ORACLE默认的设置建表(DBASTUDIO里面),默认是全部大写,这样,在ORACLE数据库里的字段就如"Column_1".如果你把引号去掉,ORACLE自动默认为全部大写,即"COLUMN_1",所以这段SQL在PL/SQL中执行的

InstallShield在MySQL和Oracle中执行SQL脚本的方法InstallShield在MySQL和Oracle中执行SQL脚本的方法

简述 InstallShield已经内建了对MySQL和Oracle的支持.但是这个功能是通过ODBC实现的,它对SQL脚本的格式要求非常严格,因此已经通过官方客户端测试的脚本在IS中执行时往往就会报错. 一般来说,数据库脚本只保证通过官方客户端测试即可,同时维护一份供IS执行的脚本费时费力.因此,考虑安装程序对两数据库的支持通过官方客户端实现. MySQL   function InstallMySQLComponent(szComponent) NUMBER nResult; STRING

实用svn主干trunk自动merge到各个分支branch脚本

实用svn主干trunk自动merge到各个分支branch脚本 大多数使用svn的公司,当发现bug时或新功能时,会从主干trunk直接产生一个分支branch,如叫bug01.接着同事A修改里面的bug,如果测试通过,就提交分支,将分支bug01合并到主干,并解决冲突和主干保持一致.同事B也拉了个分支bug02,他也修改了,也测试通过,就提交分支,将分支bug02合并到主干,并解决冲突和主干保持一致.理论上没有任何问题. 问题出现 但是有这样一个情况,同事A修改完就提交分支,合并到主干解决冲

分组合并,动态分列

1 IF OBJECT_ID('TEMPDB..#TEMP')>0 2 DROP TABLE #TEMP 3 GO 4 IF OBJECT_ID('TEMPDB..#TEMP2')>0 5 DROP TABLE #TEMP2 6 GO 7 8 --模拟数据 9 SELECT *INTO #TEMP FROM ( 10 SELECT 'A' col1,'B' col2,'C' col3,'1' X,'2'Y,'3'Z 11 UNION ALL 12 SELECT 'A' A,'B' B,'C'