网站首页 > 文章中心 > 其它

oracle怎么将列转行

作者:小编 更新时间:2023-08-31 18:51:42 浏览量:229人看过

Oracle中列转行,如何实现?

基本思路:对每班学生排序,根据序号构造列名,拼接动态sql

--测试数据

create?table

);?

insert?into?"表A"?

select?'张三','100','一班'?from?dual?union?all

select?'李四','101','二班'?from?dual?union?all

--动态拼接Pivot?

declare

begin

for?x?in?(??

select?distinct?row_number()?over?(partition?by?"班级"?order?by?"学号")?seq?

from?"表A"?order?by?seq?)?loop?

sqlstr?:=?sqlstr?||?','''?||?'学号'?||to_char(x.seq)||'''';?

end?loop;?

--将前面构造的字符串放入Pivot语句中

sqlstr:='

select?*?from?(

select?"学号","班级",?''学号''||?to_char(

row_number()?over?(partition?by?"班级"?order?by?"学号"))?seq?

from?"表A")?t

pivot(

max("学号")

for?seq?in?('||sqlstr||')?

)';

--dbms_output.put_line(sqlstr);

--将查询结果放入临时视图中

sqlstr?:=?'CREATE?OR?REPLACE?VIEW?tmp_result?AS?'||?sqlstr;

execute?immediate?sqlstr;

end;

--查看结果

select?*?from?tmp_result;

结果如下:

oracle中怎么将列转换为行

可以使用wm_concat()函数;

下面是我做的一个例子,可以参考下,当然具体语法可以百度,也可以去官方文档查:

SCOTT@ ysdb1show user

USER is "SCOTT"

Table created.

SCOTT@ ysdb1insert into test_concat values(1,'a');

①. row created.

SCOTT@ ysdb1insert into test_concat values(1,'b');

SCOTT@ ysdb1insert into test_concat values(1,'c');

SCOTT@ ysdb1select * from test_concat;

ID NAME

---------- ----------

①. a

①. b

①. c

SCOTT@ ysdb1select wm_concat(name) from test_concat;

WM_CONCAT(NAME)

--------------------------------------------------------------------------------

a,b,c,q,w,e,f

SCOTT@ ysdb1select id,wm_concat(name) from test_concat group by id;

ID WM_CONCAT(NAME)

---------- --------------------------------------------------------------------------------

①. a,c,b

oracle列转行

INSERT INTO 新表 (SELECT ID, '呼吸系统疾病' FROM 原表 WHERE 呼吸系统疾病有无 = 1 UNION SELECT ID, '消化系统疾病' FROM 原表 WHERE 消化系统疾病有无 = 1

UNION SELECT ID, '循环系统疾病' FROM 原表 WHERE 循环系统疾病有无 = 1)

如果使用行转列,还得使用merge into,还不如上面的语句清晰.

oracle 多列 列转行

参考:、 一下,网上有一篇比较详细的文档:

pivot 列转行

测试数据 (id,类型名称,销售数量),案例:根据水果的类型查询出一条数据显示出每种类型的销售数量.

分组查询 (当然这是不符合查询一条数据的要求的)

select name, sum(nums) nums from demo group by name

行转列查询

select * from (select name, nums from demo) pivot (sum(nums) for name in ('苹果' 苹果, '橘子', '葡萄', '芒果'));

注意: pivot(聚合函数 for 列名 in(类型)) ,其中 in('') 中可以指定别名,in中还可以指定子查询,比如 select distinct code from customers

当然也可以不使用pivot函数,等同于下列语句,只是代码比较长,容易理解

select * from (select sum(nums) 苹果 from demo where name='苹果'),(select sum(nums) 橘子 from demo where name='橘子'),??(select sum(nums) 葡萄 from demo where name='葡萄'),(select sum(nums) 芒果 from demo where name='芒果');

unpivot 行转列

顾名思义就是将多列转换成1列中去

创建表和数据

列转行查询

注意: unpivot没有聚合函数,xiaoshou、jidu字段也是临时的变量

以上就是土嘎嘎小编为大家整理的oracle怎么将列转行相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章