Oracle行转列操作
有时候我们在展示表中数据的时候,需要将行转为列来显示,如以下形式: 原表结构展示如下: 现在需要将上面的原表结构转换为如下所示的结构形式来展示: 一、创建销售表sale_hst表结构 --创建销售表 create table sale_hst ( prdt_name varchar2(10),--产品名称 sale_amt number(8),--销售额 season varchar2(10)--季度 ); 二、插入基础数据 --插入如上所示的基础数据 insert into sale_hst values (‘奶酪‘,50,‘第一季度‘); insert into sale_hst values (‘奶酪‘,60,‘第二季度‘); insert into sale_hst values (‘啤酒‘,80,‘第四季度‘); 三、使用SQL语句转换 方案1:使用case...when...then...else...end...语句 --方案1:使用case...when...then...else...end...语句 select prdt_name,sum(case when season=‘第一季度‘ then sale_amt else 0 end) 第一季度销售额,sum(case when season=‘第二季度‘ then sale_amt else 0 end) 第二季度销售额,sum(case when season=‘第三季度‘ then sale_amt else 0 end) 第三季度销售额,sum(case when season=‘第四季度‘ then sale_amt else 0 end) 第四季度销售额 from sale_hst group by prdt_name; 方案2:Oracle下可以用decode函数处理 说明: Oracle下可以用decode函数处理: --方案2:Oracle下可以用decode函数处理 select prdt_name,sum(decode(season,‘第一季度‘,sale_amt,0)) as 第一季度销售额,‘第二季度‘,0)) as 第二季度销售额,‘第三季度‘,0)) as 第三季度销售额,‘第四季度‘,0)) as 第四季度销售额 from sale_hst group by prdt_name; 有时候我们又有如下的需求: 原表的数据形式展示如下: shopping表: 转换为如下的形式1展示: -------------------------------------------- 转换为如下的形式2展示: 一、创建购物表shopping表结构 --创建购物表shopping create table shopping ( u_id number(10),goods varchar2(8),num number(10) ); ?二、插入基础数据 --插入如上所示的基础数据 insert into shopping values (1,‘苹果‘,2); insert into shopping values (2,‘梨子‘,5); insert into shopping values (1,‘西瓜‘,4); insert into shopping values (3,‘葡萄‘,1); insert into shopping values (3,‘香蕉‘,1); insert into shopping values (1,‘橘子‘,3); 三、使用SQL语句转换 形式1: --形式1的语句 select u_id,wmsys.wm_concat(goods) goods_sum,sum(num) total_num from shopping group by u_id; 形式2: --形式2的语句 select u_id,wmsys.wm_concat(goods || ‘(‘ || num || ‘斤)‘ ) goods_sum,sum(num) total_num from shopping group by u_id; 说明: Oracle中wm_concat(column)函数的使用: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |