oracle 多行转多列,求SQL语句,转多列的时候可能有空列(不连续的),具体看下图,或者有疑问我会及时回答
发布网友
发布时间:2022-08-17 18:21
我来回答
共1个回答
热心网友
时间:2023-10-13 13:32
以下是我 用动态SQL 实现 行列转换的实例 虽然不是你上面的几张表但是你可以根据我的写法 转换看看
--------------------------------------用动态SQL 实现行列转换
create table tb
(
t_name varchar2(10),
t_course varchar2(10),
t_score number
);
insert into tb values('张三','语文',73);
insert into tb values('张三','数学',83);
insert into tb values('张三','物理',93);
insert into tb values('张三','英语',63);
insert into tb values('李四','语文',74);
insert into tb values('李四','数学',84);
insert into tb values('李四','物理',94);
insert into tb values('李四','英语',64);
commit
select *from tb;
--------------
declare
t_name varchar2(10);
t_course1 number;
t_course2 number;
t_course3 number;
t_course4 number;
type c_type is ref cursor;
cur c_type;
begin
open cur for
'select t_name,
sum(case t_course when '''||'语文'||'''then t_score else 0 end),
sum(case t_course when '''||'数学'||'''then t_score else 0 end),
sum(case t_course when '''||'物理'||'''then t_score else 0 end),
sum(case t_course when '''||'英语'||'''then t_score else 0 end)
from tb group by t_name';
loop
fetch cur into t_name, t_course1 ,t_course2,t_course3,t_course4;
exit when cur%notfound;
dbms_output.put_line(t_name||'语文'||t_course1||'数学'||t_course2||'物理'||t_course3||'英语'||t_course4);
end loop;
close cur;
end;
满意请接受我的答案 并采纳 谢谢!追问自己到网上找了类似的,然后最终自己写出来了, 回答的那个是不对的, 值不是数字,不能用sum的; decode 这个才是核心,然后再wm_concat合并多行,得到最终结果 ;
当然也很感谢你的回答,虽然公布这个答案时才看到你的回答!^_^
oracle行转列
Oracle中行转列的操作可以通过PIVOT函数实现。以下是 Oracle数据库中的行转列操作,通常指的是将多行数据转换成多列数据的展示形式。这种转换在数据分析、报表生成等场景中非常常见。为了实现这种转换,Oracle提供了一个非常强大的函数——PIVOT。PIVOT函数的作用:PIVOT函数的主要作用是根据指定的值将数据行...
SQL两个表关联查询后如何将多行数据转换成一行多列,我查到的结果如图...
oracle 中max 加上deocde可以实现。。
...和不同字段1共同存在字段2值的记录,求SQL语句
select *, count(distinct value) from 表a group by value 结果:id value count(distinct name)3 e 1 2 f 1 最后一项是多余的,不用管就行了,目的达到。。。group by 必须放在 order by 和 limit之前,不然会报错 查询某个字段重复!select from 表a u where u.value in...
求助,oracle多行数据合并成一行
select id ,listagg( name, ',' ) within group ( order by id ) as name from TABLE_NAME GROUP BY id;
oracle数据库,对多列,空集合,合并为一列查询SQL的方法?
因为oracle都是列处理函数,先利用union行转列,然后在找到每个id分组对应的最小值,再合在一起,不过如果数据量大的话,那么这种办法不那么靠谱。
oracle行转列函数
Oracle中的行转列函数主要是使用PIVOT来实现。这是一种SQL查询语句的功能,可将原本行格式的数据转化为列格式,有助于对数据的整理展示和对比分析。接下来我们将对Oracle的PIVOT函数进行详细解释。首先,Oracle数据库的PIVOT是行转列操作的一种非常有效的方法。当数据的展示和分析需求中需要针对某个或多个...
需求:SQL语句怎么拼接?都不空,前空后不空,后空前不空都怎么拼接?_百度...
:to,sysdate)需要明确一下,前、后空的时候如何给参数 补充:前参数为p_from,后参数为p_to 1. 前为空,即从求截至参数p_to时 applyTime <= p_to 2. 后为空,即从参数p_from之后 applyTime >= p_from 3. 前后都不空,即从p_from到p_to之间 applyTime between p_from and p_to ...
SQL求助,我要想在一张表新增多行,只有第一列值不同,后面的列值相同,该...
第一步,你先找个有足够多记录的表,比如我这里有个表temp,里面有很多记录。第二步,insert into 要插入记录的表 select rownum,1,0,0,9 from temp where rownum <= 要生成的行数。执行以上两步即可。针对于Oracle数据库,其他类型的数据库原理一样。另外,表temp中行数要比你要生成的行数多...
SQL语句-如何拼接多列的值?
1、插入数据 这里以MySQL数据库为例,插入原始数据用于后续实验。其他数据库的插入语法可能略有差异,请自行调整。2、在MySQL中进行串联拼接 使用concat函数进行字段拼接,语法如下:对表中的name、age字段进行拼接:结果:3、在PostgreSQL、Oracle中进行串联拼接 使用||符号进行字段拼接,语法如下:对表中的...
求sql语句。得出表中两列相减的值
1、语句如下:select A, B, A-B as C from 表1 2、计算列:可以使用同一表中的其他列的表达式计算得来。表达式可以是非计算列的列名、常量、函数,也可以是用一个或多个运算符连接的上述元素的任意组合。表达式不能为子查询。语句中的A-B就是计算列,as C的意思是给这个计算列起个列名叫C。...