求助,oracle多行数据合并成一行

求助,oracle多行数据合并成一行,第1张

我现在身边没有 数据库环境 这个是我以前写的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数据库查询的多条结果如何合并成一条等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9716471.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存