您的当前位置:首页正文

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

2023-11-09 来源:好兔宠物网
技术分享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类型字符串的参数 见截图技术分享BEGINDECLARE 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脚本

标签:

小编还为您整理了以下内容,可能对您也有帮助:

SQL 分组统计,再合并组

select
ta.deptname,
count(ta.deptname)
as
personcount,
sum(ta.status1)
as
status1,
sum(ta.status2)
as
status2,
sum(ta.status3)
as
status3,
sum(ta.status4)
as
status4
from
(select
deptname,
case
status
when
'状态1'
then
1
else
0
end
as
status1,
case
status
when
'状态2'
then
1
else
0
end
as
status2,
case
status
when
'状态3'
then
1
else
0
end
as
status3,
case
status
when
'状态4'
then
1
else
0
end
as
status4
from
tablename
where
datepart(y,
date)=2011
and
datepart(m,
date)=1)
ta
group
by
ta.deptname
月份需要加上年份一起判断,
合计不能从这条语句中得到,可以通过另外一条语句或者通过程序中对数据分析得到,不知道你前台用什么开发的,是不是有控件可以直接生成.
select
count(*)
as
recordcount,
sum(tb.status1)
as
status1,
sum(tb.status2)
as
status2,
sum(tb.status3)
as
status3,
sum(tb.status4)
as
status4
from
(select
ta.deptname,
count(ta.deptname)
as
personcount,
sum(ta.status1)
as
status1,
sum(ta.status2)
as
status2,
sum(ta.status3)
as
status3,
sum(ta.status4)
as
status4
from
(select
deptname,
case
status
when
'状态1'
then
1
else
0
end
as
status1,
case
status
when
'状态2'
then
1
else
0
end
as
status2,
case
status
when
'状态3'
then
1
else
0
end
as
status3,
case
status
when
'状态4'
then
1
else
0
end
as
status4
from
tablename
where
datepart(y,
date)=2011
and
datepart(m,
date)=1)
ta
group
by
ta.deptname)
tb
这条语句可以得到合计值

SQL 分组统计,再合并组

select
ta.deptname,
count(ta.deptname)
as
personcount,
sum(ta.status1)
as
status1,
sum(ta.status2)
as
status2,
sum(ta.status3)
as
status3,
sum(ta.status4)
as
status4
from
(select
deptname,
case
status
when
'状态1'
then
1
else
0
end
as
status1,
case
status
when
'状态2'
then
1
else
0
end
as
status2,
case
status
when
'状态3'
then
1
else
0
end
as
status3,
case
status
when
'状态4'
then
1
else
0
end
as
status4
from
tablename
where
datepart(y,
date)=2011
and
datepart(m,
date)=1)
ta
group
by
ta.deptname
月份需要加上年份一起判断,
合计不能从这条语句中得到,可以通过另外一条语句或者通过程序中对数据分析得到,不知道你前台用什么开发的,是不是有控件可以直接生成.
select
count(*)
as
recordcount,
sum(tb.status1)
as
status1,
sum(tb.status2)
as
status2,
sum(tb.status3)
as
status3,
sum(tb.status4)
as
status4
from
(select
ta.deptname,
count(ta.deptname)
as
personcount,
sum(ta.status1)
as
status1,
sum(ta.status2)
as
status2,
sum(ta.status3)
as
status3,
sum(ta.status4)
as
status4
from
(select
deptname,
case
status
when
'状态1'
then
1
else
0
end
as
status1,
case
status
when
'状态2'
then
1
else
0
end
as
status2,
case
status
when
'状态3'
then
1
else
0
end
as
status3,
case
status
when
'状态4'
then
1
else
0
end
as
status4
from
tablename
where
datepart(y,
date)=2011
and
datepart(m,
date)=1)
ta
group
by
ta.deptname)
tb
这条语句可以得到合计值

数据库中如何分类、分组并总计SQL数据

需要用group by语句来统计。

1、创建测试表、插入数据:

create table test

(id int,

name varchar(10),

score int,

classname varchar(20));

 

insert into test values (1,'张三',100,'一班');

insert into test values (2,'李四',89,'一班');

insert into test values (3,'王五',97,'一班');

insert into test values (4,'赵六',87,'二班');

insert into test values (5,'孙七',94,'二班');

insert into test values (6,'杨八',76,'二班');

2、查询每个班级的总分,可用如下语句:select classname,SUM(score) as 总分 from test group by classname;

3、结果截图:

sql分组求和

1、使用having对分组结果进行过滤,一般情况下having是放在group by的后面。

2、compute 可以对查询结果进行小计,放在order by后面,使用compute sum对查询结果汇总。

3、根据分组小计,利用compute by实现,by后面接需要分组小计的字段。

4、可以利用SQL Server数据库命令合并查询结果集,利用union all,是将两个或以上表的查询结果合并起来,不包括重复的。

5、可以利用SQL Server数据库命令合并查询结果集,除了利用union all,还有union,union也是将两个或两个以上的查询结果合并起来,但是它是包含重复的。

6、如果上述union或union all拼接的两个子查询字段不匹配,保证字段个数一致,就会出现消息205错误显示运算符合并的所有查询必须在其目标列表中。