我现在身边没有 数据库环境 这个是我以前写的SQL
你看一下,修改一下就可以了
Oracle分组查询用逗号分隔结果SQL语句
表一:
学号 姓名
1 张三
2 李四
3 王五
。。。。
表二:
学号 选修课程
1 语文
1 数学
2 英语
2 语文
3 数学
3 英语
3 历史
。。。。。
要求查处结果
学好 姓名 选修课程所有课程名称以,隔开
1 张三 语文,数学
2 李四 英语,语文
3 王五 数学,英语,历史
;
create table a_lyh_test
as
select 1 as "学号" , '张三' as "姓名" from dual
union all
select 2 as "学号" , '李四' as "姓名" from dual
union all
select 3 as "学号" , '王五' as "姓名" from dual
;
create table b_lyh_test
as
select 1 as "学号" , '语文' as "选修课程" from dual
union all
select 1 as "学号" , '数学' as "选修课程" from dual
union all
select 2 as "学号" , '英语' as "选修课程" from dual
union all
select 2 as "学号" , '语文' as "选修课程" from dual
union all
select 3 as "学号" , '数学' as "选修课程" from dual
union all
select 3 as "学号" , '英语' as "选修课程" from dual
union all
select 3 as "学号" , '历史' as "选修课程" from dual
;
select f"学号"
,f"姓名"
,ltrim(max(sys_connect_by_path(f"选修课程",','))
keep (dense_rank last order by fpnum),',') as "选修课程"
from
(
select t"学号"
,t"姓名"
,t"选修课程"
,row_number() over(partition by t"学号" order by t"姓名") as pnum
,row_number() over(partition by t"学号" order by t"姓名")-1 as lnum
from
(
select a"学号",a"姓名",b"选修课程"
from a_lyh_test a
,b_lyh_test b
where a"学号" = b"学号"
) t
) f
group by f"学号",f"姓名"
connect by flnum = prior fpnum and f"学号" = prior f"学号"
start with fpnum = 1;
其实数据合并涉及到的是数据库索引问题(excel只是针对表简化的数据库)
把一行作为一条数据,就要提出一个针对不同行唯一的值作为此行数据标记,即索引项。
另一个表可针对此项作为查询关联到此表(可按生物特征人名索引,但如果数据量大可能出现同名),因此需要针对手头数据进行确定。
在确定好之后,可用函数:
直接按查询引用
LOOKUP、VLOOKUP、HLOOKUP
或先查询到行号,然后对应行号引用:
MATCH、INDEX
2019以后,返回值可以是数组,即可以一个公式返回多列内容。
如果引用的表查询不是唯一项,可使用
FILTER 根据条件筛选多条记录 (2021新增),即只要右侧下方留有足够空白位置,可直接显示全部需要结果,即可显示满足条件的多行多列内容
您好
以前有高人写过类似的:
select id,group_concat(re_id order by re_id separator ",") as re_id
from tablename
group by id
答题不易,互相理解,您的采纳是我前进的动力,感谢您。
希望回答对你有帮助,如果有疑问,请继续追问
1:选择相对较为简单的数据库做为从数据库,另外一个数据库作为主数据库。
2:将从数据库里面的数据合并到主数据库里,有几点要注意的,首先你要搞清楚从数据库里面的表和主数据库里面表有没重复(不仅仅是表名,含义相同也视为相同。)如果有重复,就再检查从数据库这个表里的字段,有没重复(主要是含义是否相同),如果重复就只需要把字段信息拷贝到主数据库这个表里就行,没有重复,直接把整个字段添加进去就行。至于没有重复的表,整个直接拷贝。
3记录你合并数据库里面对从数据库里面字段和表的修改信息,包括字段类型。这一点非常重要!
4修改从数据库所在的系统,把相关连接数据库的表和字段的编码修改过和主数据库一致!
5主系统不用做任何修改,最后进行测试!
select eventtype,mainevenname,max(totalspace) totalspace,totalspaceunit,max(freespace) freespace,freespaceunit,max(freepercent) freepercent,freepercentunit from 表名 group by enenttype,maineventname,totalspaceunit,freespaceunit,freepercentunit
这样?表名自己替换
你这个是什么数据库,先给你一个死板点的方法,但是执行效率高,如果支持动态科目的话,速度会差点。
---------------------------------------------------------------------------------------------------------------------
sql2005下调试
declare @tb table
(
ID INT,
XH INT,
KM NVARCHAR(10),
CJ FLOAT
)
INSERT INTO @tb
select 1,1,'语文',80 union all
select 2,1,'数学',46 union all
select 3,1,'英语',80 union all
select 4,2,'语文',80 union all
select 5,2,'数学',46 union all
select 6,2,'英语',59
select
XH as 学号,
sum(case when KM='语文' then CJ else 0 end) as 语文成绩,
sum(case when KM='数学' then CJ else 0 end) as 数学成绩,
sum(case when KM='英语' then CJ else 0 end) as 英语成绩,
sum(CJ) as 总分,
avg(CJ) as 平均分
from @tb
group by XH
-----------------------------------
执行结果:
学号 语文 数学 英语 总分 平均分
1 80 46 80 206 686666666666667
2 80 46 59 185 616666666666667
以上就是关于求助,oracle多行数据合并成一行全部的内容,包括:求助,oracle多行数据合并成一行、excel怎么把同一个人的不同数据合并到一起、mysql数据库查询的多条结果如何合并成一条等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)