如何把ORACLE数据表的列变成行
答案:2 悬赏:70 手机版
解决时间 2021-01-29 05:39
- 提问者网友:暗中人
- 2021-01-28 22:06
如何把ORACLE数据表的列变成行
最佳答案
- 五星知识达人网友:duile
- 2021-01-28 22:31
固定列数的行列转换如
student subject grade
---------------------------
student1 语文 80
student1 数学 70
student1 英语 60
student2 语文 90
student2 数学 80
student2 英语 100
转换为
语文 数学 英语
student1 80 70 60
student2 90 80 100
语句如下:
select student,sum(decode(subject,'语文', grade,null)) "语文",
sum(decode(subject,'数学', grade,null)) "数学",
sum(decode(subject,'英语', grade,null)) "英语"
from table
group by student
2、不定列行列转换如
c1 c2
--------------
1 我
1 是
1 谁
2 知
2 道
3 不
......
转换为
1 我是谁
2 知道
3 不
这一类型的转换必须借助于PL/SQL来完成,这里给一个例子
CREATE OR REPLACe FUNCTION get_c2(tmp_c1 NUMBER)
RETURN VARCHAR2
IS
--用于返回值
Col_c2 VARCHAr2(4000);
BEGIN
FOR cur IN (SELECT c2 FROM t WHERe c1=tmp_c1) LOOP
Col_c2 := Col_c2||cur.c2;
END LOOP;
Col_c2 := rtrim(Col_c2,1);
RETURN Col_c2;
&
student subject grade
---------------------------
student1 语文 80
student1 数学 70
student1 英语 60
student2 语文 90
student2 数学 80
student2 英语 100
转换为
语文 数学 英语
student1 80 70 60
student2 90 80 100
语句如下:
select student,sum(decode(subject,'语文', grade,null)) "语文",
sum(decode(subject,'数学', grade,null)) "数学",
sum(decode(subject,'英语', grade,null)) "英语"
from table
group by student
2、不定列行列转换如
c1 c2
--------------
1 我
1 是
1 谁
2 知
2 道
3 不
......
转换为
1 我是谁
2 知道
3 不
这一类型的转换必须借助于PL/SQL来完成,这里给一个例子
CREATE OR REPLACe FUNCTION get_c2(tmp_c1 NUMBER)
RETURN VARCHAR2
IS
--用于返回值
Col_c2 VARCHAr2(4000);
BEGIN
FOR cur IN (SELECT c2 FROM t WHERe c1=tmp_c1) LOOP
Col_c2 := Col_c2||cur.c2;
END LOOP;
Col_c2 := rtrim(Col_c2,1);
RETURN Col_c2;
&
全部回答
- 1楼网友:几近狂妄
- 2021-01-29 00:04
dos 环境下使用sql*loader命令 加载
使用其它数据库的数据转移工具
oracle 企业管理器中的数据加载功能
具体的技术实现
一、dos 环境下加载
1、首先,服务器端的侦听服务必须已经开启。
测试方法:dos 下输入
c:\\>sqlplus username/password@servicename
2、然后使用 oracle 的 sqlldr 命令进行数据的导入
前期条件
1) oracle 数据库端必须已经建好了需要导入的数据表的结构
2) 一个数据源文件 下面例子中为制表符分隔的文本文件 model.txt ,为excel 表中导出的
3) 手工编辑一个xxx.ctl 的控制文件
4) 命令行加载数据
如下实例:
以下文件缺省放到c:\\ 下,如果不是,就需要指明全路径
1. 命令控制文件 input.ctl 内容
命令
说明
load data
1、控制文件标识
infile 'model.txt'
2、要输入的数据文件名为test.txt
append into table system.塔位属性表
3、向表test中追加记录
fields terminated by x'09'
4、指定分隔符,字段终止于x'09',是一个制表符(tab)
(编号,名称,大小)
5、定义列对应表中顺序
控制文件中指定插入数据的方式关键字
insert,为缺省方式,在数据装载开始时要求表为空
append,在表中追加新记录
replace,删除旧记录,替换成新装载的记录
truncate,同上
在 dos 窗口下使用 sql*loader 命令实现数据的导入
c:\\>sqlldr userid=system/manager@ servicename control=input.ctl
默认日志文件名为:input.log
默认坏记录文件为:input.bad
二、使用其它数据库转移工具
以下以sql server 导入导出向导为例
1、在数据的导入导出向导中设置数据源服务器,实例中选择数据源选择sql server
2、然后指定要导入的oracle 数据源
3、需要配置oracle 的属性信息
需要注意的是,登录数据库的用户信息即为数据导入之后的方案名,即导入之后的sql server 中的表在oracle 中标志名为 username.表名
以下按照提示即可,可以完全导入sql server 中的数据表和视图,也可以使用查询语句返回你要选择的列或者行。
三、oracle 企业管理器中的数据加载功能
登录oracle 的控制台界面,针对单独的数据表可以使用数据加载工具
中间需要指定控制文件等,同dos 加载一致,不再重复
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯