oracle怎么把多列 oracle增加一列数据

关于Oracle中实现单列拆分成多列的技术应用

1.前言:通过使用FineBI进行“点地图”方式来展现数据。

成都创新互联是一家集网站建设,绥宁企业网站建设,绥宁品牌网站建设,网站定制,绥宁网站建设报价,网络营销,网络优化,绥宁网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

2.遇到的问题:原始表 经纬度 是一个字段保存,比如 xy列 中某行值为“130.111111,33.999999”。

3.解决的方法:通过 xy列 中’,‘逗号并使用函数substr()和函数instr() 处理后效果图和SQL示例如下

4.附注:

substr函数的用法 :

取得字符串中指定起始位置和长度的字符串 ,默认是从起始位置到结束的子串。

substr( string, start_position, [ length ] )    即:  substr('目标字符串',开始位置,长度)

instr函数的用法 :

格式一:instr( string1, string2 )   即:  instr(源字符串, 目标字符串),本案例是使用此格式。

格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] )   即:instr(源字符串, 目标字符串, 起始位置, 匹配序号)

解析:string2 的值要在string1中查找,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_appearance(几)次出现string2。

instr是一个非常好用的字符串处理函数,几乎所有的字符串分隔都用到此函数。

请问各位大神 oracle中 怎么将多列数据合并为一列

方法有如下两种:

1、利用存储过程,先查出所要的数据,循环放入一列中:

select 编码,decode(一级,null,null,一级||'')||decode(二级,null,null,二级||'')||decode(三级,null,null,三级||'')||decode(四级,null,null,四级||'') from 表名

2、使用wm_concat()方法,如select wm_concat(name) as name from user;

oracle 多列 列转行

Oracle 11g 行列互换 pivot 和 unpivot 说明在Oracle 11g中,Oracle 又增加了2个查询:pivot(行转列) 和unpivot(列转行)

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

pivot 列转行

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

?

123456789

create table demo(id int,name varchar(20),nums int);  ---- 创建表insert into demo values(1, '苹果', 1000);insert into demo values(2, '苹果', 2000);insert into demo values(3, '苹果', 4000);insert into demo values(4, '橘子', 5000);insert into demo values(5, '橘子', 3000);insert into demo values(6, '葡萄', 3500);insert into demo values(7, '芒果', 4200);insert into demo values(8, '芒果', 5500);

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

?

1

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

行转列查询

?

1

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

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

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

?

12

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列中去

案例:现在有一个水果表,记录了4个季度的销售数量,现在要将每种水果的每个季度的销售情况用多行数据展示。

创建表和数据

?

1234567

create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int); insert into Fruit values(1,'苹果',1000,2000,3300,5000);insert into Fruit values(2,'橘子',3000,3000,3200,1500);insert into Fruit values(3,'香蕉',2500,3500,2200,2500);insert into Fruit values(4,'葡萄',1500,2500,1200,3500);select * from Fruit

列转行查询

?

1

select id , name, jidu, xiaoshou from Fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )

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

oraclealtertableaddcolumn怎样将添加

1、首先,需要向表中添加一列或多列。

2、其次,需要指定要添加新列的表的名称。

3、最后,指定列名,数据类型及其约束即可。

oracle 多行多列变成一列多行

你这个应该是一张通用的表吧,就是说下面还有可能出现,诸如id=10002或者10003等。

如果这样的话,就用row_number()over(partition

by

id),进行排序,然后把排序后的再进行转换。

比如上面这个就是

select

row_number()over(partition

by

id)

id_id,id,countnum

from

table

这样会出来结果,如下

id_id

id

countnum

1

10001

30

2

10001

40

3

10001

50

1

10002

20

2

10002

50

3

10002

30

上面的结果没有排序,也可以按照countnum进行排序,就是在partition

by

id的后面加一个orderby,看你用不用了。

然后再对这个结果进行行列转换,用case

when就行,我假设上张表取别名为a

那么

select

id,(case

when

id_id=1

then

countnum

end)

column1,,(case

when

id_id=2

then

countnum

end)

column2,(case

when

id_id=3

then

countnum

end)

column3,(case

when

id_id=4

then

countnum

end)

column3,........from

a

不过这种写法有一个问题,就是必须写一个最长的,不然你就有数据不能显示出来。

如果只有一个10001,那么可以利用rownum直接编组。


当前名称:oracle怎么把多列 oracle增加一列数据
文章源于:http://pwwzsj.com/article/hjhjdc.html