pl/sql 行列轉換問題

susie8449 2008-09-24 07:25:28
向各位高手請教一下如何用select 執行表A,使運行的結果如下:
表:A

name yuwen shuxue yingyu
a1 70 80 90
a2 71 81 91

運行的結構:
name kemu chengji
a1 yuwen 70
a1 shuxue 80
a1 yingyu 90
a2 yuwen 71
a2 shuxue 81
a2 yingyu 91

謝謝!
...全文
208 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
c01406 2009-08-15
  • 打赏
  • 举报
回复
倒过来会查不?哪位会啊????
知道下面 查上面!

在不知道有什么kemu的情况下
simonezhlx 2008-09-25
  • 打赏
  • 举报
回复
2楼,4楼殊途同归
hyrongg 2008-09-25
  • 打赏
  • 举报
回复
建议下载我上传的资源,《Oracle 行列转换总结》写得很详细

http://hyrongg.download.csdn.net/
susie8449 2008-09-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mantisXF 的回复:]
TRY IT ..

SQL codeSQL> SELECT * FROM TEST111;

NAME YUWEN SHUXUE YINGYU
---------- ---------- ---------- ----------
A1 70 80 90
A2 71 81 91

SQL>
SQL> SELECT NAME,
2 DECODE(RN,1,'YUWEN',2,'SHUXUE',3,'YINGYU',NULL) "KEMU",
3 SUBSTR(','||YUWEN||','||SHUXUE||','||YINGYU||',',
4 …
[/Quote]

謝謝枫の叶,但是我有些地方不太明白:主要是求子字符串喝查找字符串,我看不明白是怎么回事?
INSTR(',' || YUWEN || ',' || SHUXUE || ',' || YINGYU || ',',
',',
1,
RN)

我剛查過instr的用法:InStr([start, ]string1, string2[, compare]) 返回指定一字符串在另一字符串中最先出现的位置。但是上面的語句我就不明白!希望枫の叶能幫解釋一下。謝謝
oracledbalgtu 2008-09-25
  • 打赏
  • 举报
回复
union简单的就实现了!

CREATE TABLE a(NAME VARCHAR2(10),yuwen INT,shuxue INT,yingyu INT);
INSERT INTO a VALUES('a1',70,80,90);
INSERT INTO a VALUES('a2',71,81,91);
SELECT NAME, 'yuwen' KEMU, YUWEN CHENGJI
FROM A
UNION
SELECT NAME, 'shuxue' KEMU, SHUXUE
FROM A
UNION
SELECT NAME, 'yingyu' KEMU, YINGYU FROM A

输出:
NAME KEMU CHENGJI
a1 shuxue 80
a1 yingyu 90
a1 yuwen 70
a2 shuxue 81
a2 yingyu 91
a2 yuwen 71


[Quote=引用楼主 susie8449 的帖子:]
向各位高手請教一下如何用select 執行表A,使運行的結果如下:
表:A

name yuwen shuxue yingyu
a1 70 80 90
a2 71 81 91

運行的結構:
name kemu chengji
a1 yuwen 70
a1 shuxue 80
a1 yingyu 90
a2 yuwen 71
a2 shuxue 81
a2 yingyu 91

謝謝!
[/Quote]
susie8449 2008-09-25
  • 打赏
  • 举报
回复
谢谢!现在会照着葫芦画瓢了!:)
you_tube 2008-09-25
  • 打赏
  • 举报
回复
用decode最好了
mantisXF 2008-09-25
  • 打赏
  • 举报
回复
INSTR会在下面的字符串中最前面开始找逗号的位置:当RN为1时,找第1个逗号的位置并返回位置;当RN为2时,找第2个逗号的位置并返回位置;当找不到时就返回0.
A: ',' || YUWEN || ',' || SHUXUE || ',' || YINGYU || ','

[Quote=引用 5 楼 susie8449 的回复:]
引用 2 楼 mantisXF 的回复:
TRY IT ..

SQL codeSQL> SELECT * FROM TEST111;

NAME YUWEN SHUXUE YINGYU
---------- ---------- ---------- ----------
A1 70 80 90
A2 71 81 91

SQL>
SQL> SELECT NAME,
2 DECODE(RN,1,'YUWEN',2,'SHUXUE',3,'YINGYU',NULL) "KEMU",
3 SUBSTR(','||YUWEN||','||SHUXUE|…
[/Quote]
BlueskyWide 2008-09-24
  • 打赏
  • 举报
回复
2楼给你做出来了,请楼主结贴吧。
mantisXF 2008-09-24
  • 打赏
  • 举报
回复
TRY IT ..
SQL> SELECT * FROM TEST111;

NAME YUWEN SHUXUE YINGYU
---------- ---------- ---------- ----------
A1 70 80 90
A2 71 81 91

SQL>
SQL> SELECT NAME,
2 DECODE(RN,1,'YUWEN',2,'SHUXUE',3,'YINGYU',NULL) "KEMU",
3 SUBSTR(','||YUWEN||','||SHUXUE||','||YINGYU||',',
4 INSTR(','||YUWEN||','||SHUXUE||','||YINGYU||',',',',1,RN)+1,
5 INSTR(','||YUWEN||','||SHUXUE||','||YINGYU||',',',',1,RN+1)
6 -INSTR(','||YUWEN||','||SHUXUE||','||YINGYU||',',',',1,RN)-1) "XF_COL"
7 FROM TEST111,
8 (
9 SELECT ROWNUM RN
10 FROM ALL_OBJECTS
11 WHERE ROWNUM <= (SELECT MAX(LENGTH(TO_CHAR(YUWEN ||','||SHUXUE||','||
12 YINGYU)) -
13 LENGTH(REPLACE(TO_CHAR(YUWEN||','||SHUXUE ||','||
14 YINGYU),
15 ',',
16 '')))
17 FROM TEST111) + 1
18 )AO
19 WHERE INSTR(','||YUWEN||','||SHUXUE||','||YINGYU||',',',',1,RN) > 0
20 ORDER BY 1;

NAME KEMU XF_COL
---------- ------ --------------------------------------------------------------------------------
A1 YUWEN 70
A1 SHUXUE 80
A1 YINGYU 90
A2 YUWEN 71
A2 SHUXUE 81
A2 YINGYU 91

6 rows selected

SQL>
horizonlyhw 2008-09-24
  • 打赏
  • 举报
回复
mark下
我的做法太麻煩 就是要做個臨時表,插入要查詢出來的信息,然後order by 就行了
第1章 概述 1. BI介绍 2. Oracle介绍与安装 2.1 Oracle安装 2.2 Oracle 默认用户 2.3 服务器连接 3. PL/SQL Developer工具 4. Oracle用户和权限 4.1用户和权限 4.2角色 第2章 SQL数据操作和查询 1. SQL简介 2. 查询 2.1查询结构 2.2查询顺序 . 2.3聚合函数 . 3. 创建表和约束 3.1 Oracle常用数据类型 3.2创建表 3.3表的约束 4. 数据操作语言(DML) 4.1数据插入 4.2更新数据 4.3删除数据 4.4 TRUNCATE(DDL命令) 5. 操作符 5.1算术运算 5.2关系运算和逻辑运算 5.3字符串连接操作符(||) 6. 高级查询 6.1 DISTINCT操作 6.2 NULL操作 6.3 IN 操作 6.4 BETWEEN…AND… 6.5 LIKE模糊查询 6.6 集合运算 6.7 连接查询 第3章 子查询和常用函数 1. 子查询 2. Oracle中的伪列 2.1 ROWID 2.2 ROWNUM 3. Oracle单行函数 3.1字符函数 3.2数字函数 3.3日期函数 3.4转换函数 3.5其他常用函数 4. Oracle分析函数 4.1 分析函数介绍 4.2 分析函数种类和用法 4.3 行列转换 第4章 表空间、数据库对象 1.同义词 2.序列 3.视图 4.索引 4.1 索引介绍 4.2 索引种类 4.3 索引优缺点 4.4 索引失效 5.表空间 6.表分区 6.1表空间及分区表的概念 6.2表分区的具体作用 6.3.表分区的优缺点 6.4表分区的几种类型及操作方法 6.5有关表分区的一些维护性操作 第5章 PL/SQL程序设计 1. PL/SQL简介 2. PL/SQL基础 2.1声明 2.2条件控制 2.3循环控制 2.4游标 2.5动态SQL 3.创建存储过程 4.创建自定义函数 5.异常处理 6.同步数据 7.创建包 8.创建日志 第6章
Oracle SQL Handler,是专为 Oracle 数据库开发人员及操作人员精心打造的一款 Oracle 客户端工具: 超智能的SQL编辑器;超方便的表格操作(可以通过修改表格的单元格数据去更新数据 库表);多种格式的数据导出包括 XLS、CSV、INSERT SQL、HTML、XML;中英文双语界面并 能切换;监控批量SQL语句的运行(在运行中可暂停、更正);不需要安装 Oracle 客户端 ;占用系统资源极少;能运行于所有的主流平台包括 Windows、Linux 、Unix 及 Mac OS; 多线程多连接。所有这些功能特性在同类工具中表现突出,甚至是本工具独有的! 还有,它能快速显示SQL的解释计划;能运行/调试 PL/SQL 语句;精确的错误定位;高 效的语句块操作;SQL格式美化;连接配置简单;自动重新连接;个性化界面设置;界面简 洁清爽;操作简便;功能实用且全面! 总之,本工具确实 “小巧、实用、方便、高效”,正是 Oralce 数据库开发人员及操作 人员所需要的强有力的工具! 是国产的,很少见吧,用过的人都说非常方便非常实用而且很强大,不逊色于同类的收费软件! 免费的产品, 强大的品质, 您还等什么! 下载网址有: http://www.onlinedown.net/softdown/91179_2.htm http://www.duote.com/soft/17069.html#downsite (请将下载的 ZIP 文件解压到一目录,鼠标双击批处理文件 start.bat 即可启动运行) 主要功能如下: 将 SELECT 语句的查询结果显示在工作表,可以直接对查询结果进行再操作,如 修改、 插入行、删除行、提交(将表格中的数据改变写入相应的数据库表中)、多功能拷贝、将选 择的单元格数据导出为 XLS /CSV /INSERT SQL /HTML /XML 等格式、单条记录操作、能方 便地查找\替换单元格中的数据、数值统计、行列移动、列排序、选择模式切换等;能方便 地查看/编辑大型的文本字段(如 CLOB、 LONG) 智能的SQL编辑器:自动弹出提示窗口,列出关键字、关键字组合、函数名、列名、对象 名、对象类型、参数、包内的过程和函数,提高SQL编辑效率。例如: (1)输入字串“sel”,一秒钟后列出以“sel”开头的所有关键字、关键字组合(如 SELECT, SELECT DISTINCT, SELECT * FROM)、函数及对象名; (2)输入字串“abc”+“.”,如果“abc”是一表名/视图,或其别名,则列出表/视图的所有列 名及数据类型;如果“abc”是一用户名,则列出该用户的所有对象;如果“abc”是一包名,则 列出包内的过程和函数; (3)输入字串“grant”+空格,列出所有权限和角色,再输入“on”+空格,列出所有对象,再 输入“to”+空格,列出所有用户名; 彩色的SQL编辑器,增强可读性: (1)关键字、注释块、引号内字符串、操作符、特殊字符等,用不同的彩色字体加以区别 ; (2)如果光标前面是一个括号,高亮度显示配对的括号 支持批量SQL语句的运行:用监控器监控每条语句的运行,在运行过程中可以中断/暂停/ 继续正在运行的语句,甚至可以更正出错误的语句 方便高效的块操作,以满足特殊需求: (1)“Format SQL” 按钮能将语句块中杂乱语句以缩进的格式进行重新编排,即格式美化; (2)“Explain Plan” 按钮能快速地显示语句的执行计划; (3)“Export” 按钮能将SQL编辑器中的 SELECT 语句块直接导出为 XLS /CSV /INSERT SQL /HTML /XML 等格式,方便于数据移植、备份、打印及存档等; (4)支持列块操作; (5)加上/去掉注释标记、加上/去掉引号、增加/减少缩进、大小写转换等 运行语句 “desc [user.]objectName[@dbLink]” 或 Ctrl+鼠标点击字串“[user.] objectName[@dbLink]”,如果是一表名,则能清楚地显示表的列信息(包括列名称、数据类 型及长度、默认值、非空)、索引、约束条件(主键、唯一键、检查键、子表、触发器、外 键、甚至外键的外键) 运行语句 “schema [user.]objectName[@dbLink]”,如果是一表名或视图名或物化视图 (快照),则显示其生成的脚本/语句 支持 PL/SQL 语句(包括 Procedure、 Function、Trigger、 Package),能够显示 DBMS_OUPTPUT.PUT_LINE 的输出;能够给出错误信息,甚至光标能够精确定位错误所在的行 列位置,方便于调试 多线程、多连接:可以创建多个会话/连接,多个会话可以同时运行,在运行过程中可以 掌控其运行状态、可以随时中断之,在运行过程中可以继续从事编辑等工作,不必等待运行 完毕才能编辑 提供对常用数据字典(如 表、视图、索引、同义词、约束、过程、触发器等)的常用 操作。例如,输入 “%NAME” 或 “NAME%” 或 “%NAME%”,能查找包含子串 “NAME” 的所有对 象名,通过弹出菜单可以对每一个对象进行操作,如修改、删除、查看等
Oracle SQL Handler,是专为 Oracle 数据库开发人员及操作人员精心打造的一款 Oracle 客户端工具 : 超智能的SQL编辑器;超方便的表格操作(可以通过修改表格的单元格数据去更新数据库表 );多种格式的数据导出包括 XLS、CSV、INSERT SQL、HTML、XML[;中英文双语界面[/b]并能切换; 监控批量SQL语句的运行(在运行中可暂停、更正);不需要安装 Oracle 客户端;占用系统资 源极少;能运行于所有的主流平台包括 Windows、Linux、Unix 及 Mac OS;多线程多连接。所有这些 功能特性在同类工具中表现突出,甚至是本工具独有的! 还有,它能快速显示SQL的解释计划;能运行/调试 PL/SQL 语句;精确的错误定位;高效的 语句块操作;SQL格式美化;连接配置简单;自动重新连接;个性化界面设置;界面简洁清爽;操作简便 ;功能实用且全面! 总之,本工具确实 “小巧、实用、方便、高效”,正是 Oralce 数据库开发人员及操作人员所需要 的强有力的工具! 是国产的,很少见吧,用过的人都说非常方便非常实用而且很强大,不逊色于同类的收费软件! 免费的产品, 强大的品质, 您还等什么! 请从如下页面下载最新版本的: http://www.onlinedown.net/softdown/91179_2.htm http://www.duote.com/soft/17069.html#downsite 工具的界面图片如下: http://img.newhua.com/100000/91179.jpg http://img.newhua.com/100000/q91179.jpg 主要功能如下: 将 SELECT 语句的查询结果显示在工作表,可以直接对查询结果进行再操作,如 修改、插入行、删除行、提 交(将表格中的数据改变写入相应的数据库表中)、多功能拷贝、将选择的单元格数据导出为 XLS /CSV /INSERT SQL /HTML /XML 等格式、单条记录操作、能方便地查找\替换单元格中的数据、数值统计、行列移动、 列排序、选择模式切换等;能方便地查看/编辑大型的文本字段(如 CLOB、 LONG) 智能的SQL编辑器:自动弹出提示窗口,列出关键字、关键字组合、函数名、列名、对象名、对象类型、参数 、包内的过程和函数,提高SQL编辑效率。例如: (1)输入字串“sel”,一秒钟后列出以“sel”开头的所有关键字、关键字组合(如 SELECT, SELECT DISTINCT, SELECT * FROM)、函数及对象名; (2)输入字串“abc”+“.”,如果“abc”是一表名/视图,或其别名,则列出表/视图的所有列名及数据类型 ;如果“abc”是一用户名,则列出该用户的所有对象;如果“abc”是一包名,则列出包内的过程和函数; (3)输入字串“grant”+空格,列出所有权限和角色,再输入“on”+空格,列出所有对象,再输入“to”+空 格,列出所有用户名; 彩色的SQL编辑器,增强可读性: (1)关键字、注释块、引号内字符串、操作符、特殊字符等,用不同的彩色字体加以区别; (2)如果光标前面是一个括号,高亮度显示配对的括号 支持批量SQL语句的运行:用监控器监控每条语句的运行,在运行过程中可以中断/暂停/继续正在运行的语句 ,甚至可以更正出错误的语句 方便高效的块操作,以满足特殊需求: (1)“Format SQL” 按钮能将语句块中杂乱语句以缩进的格式进行重新编排,即格式美化; (2)“Explain Plan” 按钮能快速地显示语句的执行计划; (3)“Export” 按钮能将SQL编辑器中的 SELECT 语句块直接导出为 XLS /CSV /INSERT SQL /HTML /XML 等格 式,方便于数据移植、备份、打印及存档等; (4)支持列块操作; (5)加上/去掉注释标记、加上/去掉引号、增加/减少缩进、大小写转换等 运行语句 “desc [user.]objectName[@dbLink]” 或 Ctrl+鼠标点击字串“[user.]objectName[@dbLink] ”,如果是一表名,则能清楚地显示表的列信息(包括列名称、数据类型及长度、默认值、非空)、索引、约束 条件(主键、唯一键、检查键、子表、触发器、外键、甚至外键的外键) 运行语句 “schema [user.]objectName[@dbLink]”,如果是一表名或视图名或物化视图(快照),则显示 其生成的脚本/语句 支持 PL/SQL 语句(包括 Procedure、 Function、T
本软件是一款 Oracle 客户端工具 - 专用于 Oracle 数据库操作: 多线程、多连接、智能/彩色SQL编辑器、中英文双语界面并能切换、支持 PL/SQL、批量SQL运行、高效的块操作、方便的表格操作,不需要安装 Oracle 客户端,能运行于所有的主流平台包括 Windows、Linux 、Unix 及 Mac OS,界面简洁、操作简便、功能实用且全面! 主要功能如下: o 用表格显示 SELECT 语句的查询结果,可以直接对查询结果进行再操作,如 修改、插入行、删除行、提交(将表格中的数据改变写入相应的数据库表中)、多功能拷贝、导出为 INSERT 语句、单条记录操作、方便的查找及替换功能、数字统计、行列移动、列排序、选择模式切换等;能方便地查看、编辑大型的文本字段(如 CLOB、 LONG) o 智能的SQL编辑器:自动弹出提示窗口,列出关键字、函数名、列名、对象名、对象类型、参数、包内的过程和函数,提高SQL编辑效率。例如: (1)输入字串“se”,两秒钟后列出以“se”开头的所有关键字及函数; (2)输入字串“abc”+“.”,如果“abc”是一表名/视图,或其别名,则列出表/视图的所有列名及数据类型;如果“abc”是一用户名,则列出该用户的所有对象;如果“abc”是一包名,则列出包内的过程和函数; (3)输入字串“grant”+空格,列出所有权限和角色,再输入“on”+空格,列出所有对象,再输入“to”+空格,列出所有用户名; (4)输入字串“drop”+空格,列出“drop”支持的所有对象类型,例如,选择“table”项再输入一空格,则又列出当前用户的所有表名; (5)当提示窗口出现时,只需输入部分字串,窗口能自动查找全串,比如,输入子串“name”,显示“first_name”项,按Ctrl+PdDn键则向下查找“last_name”项,按Ctrl+PdUp键则向上查找“first_name”项 o 彩色的SQL编辑器,增强可读性: (1)关键字、注释块、引号内字符串、操作符、特殊字符等,用不同的彩色字体加以区别; (2)如果光标前面是一个括号,高亮度显示配对的括号 o 支持批量SQL语句的运行:用监控器监控每条语句的运行,在运行过程中可以中断/暂停/继续正在运行的语句,甚至可以更正出错误的语句 o 方便高效的块操作,以满足特殊需求: (1)“Format SQL” 按钮能将语句块中杂乱语句以缩进的格式进行重新编排,即格式美化; (2)“Explain Plan” 按钮能快速地显示语句的执行计划; (3)“Export” 按钮能将 SELECT 语句块直接导出为 INSERT 语句,方便于数据移植、备份等; (4)支持列块操作; (5)加上/去掉注释标记、加上/去掉引号、增加/减少缩进、大小写转换等 o 运行语句 “desc [user.]objectName[@dbLink]” 或 Ctrl+鼠标点击字串“[user.]objectName[@dbLink]”,如果是一表名,则能清楚地显示表的列信息(包括列名称、数据类型及长度、默认值、非空)、索引、约束条件(主键、唯一键、检查键、子表、触发器、外键、甚至外键的外键) o 运行语句 “schema [user.]objectName[@dbLink]”,如果是一表名或视图名,则显示表或视图的脚本/语句,即表或视图是如何创建的(包括索引及约束条件) o 支持 PL/SQL 语句(包括 Procedure、 Function、Trigger、 Package),能够显示 DBMS_OUPTPUT.PUT_LINE 的输出;能够给出错误信息,甚至光标能够精确定位错误所在的行列位置,方便于调试 o 多线程、多连接:可以创建多个会话/连接,多个会话可以同时运行,在运行过程中可以掌控其运行状态、可以随时中断之,在运行过程中可以继续从事编辑等工作,不必等待运行完毕才能编辑 o 提供对常用数据字典(如 表、视图、索引、同义词、约束、过程、触发器等)的常用操作。例如,输入 “%NAME” 或 “NAME%” 或 “%NAME%”,能查找包含子串 “NAME” 的所有对象名,通过弹出菜单可以对每一个对象进行操作,如修改、删除、查看等

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧