易截截图软件、单文件、免安装、纯绿色、仅160KB

oracle 行转列的通用过程

 原文传送门:http://topic.csdn.net/u/20091019/11/67cd55a3-3f42-4db7-a3f8-91dd52a913cd.html?24122
经常遇到发帖求行列转换的代码,用max(decode(..))回复后,十有八九会再问一句:如果列名不固定,或者列数不固定怎么办。就要用存储过程来写,这些存储过程的代码都大同小异,我就想能不能写个通用点的过程
试了一下,把结果发出来
SQL code
create or replace procedure proc(tabname in varchar2,
col1 in varchar2,
col2 in varchar2,
col3 in varchar2,
viewname in varchar2 default 'v_tmp')
as
sqlstr varchar2(2000):='create or replace view '||viewname||' as select '||col1||' ';
c1 sys_refcursor;
v1 varchar2(100);
begin
open c1 for 'select distinct to_char('||col2||') from '||tabname;
loop
fetch c1 into v1;
exit when c1%notfound;
sqlstr:=sqlstr||'
,max(decode('||col2||','''||v1||''','||col3||'))"'||v1||'"';
end loop;
close c1;
sqlstr:=sqlstr||' from '||tabname||' group by '||col1;
execute immediate sqlstr;
end proc;
这里的几个参数,tabname指的是需要进行行列转换的表名,col1是这个表中行列转换以后要根据哪一列进行分组,那一列的列名。col2传入的是要将行转成列的那一列的列名,col3表示需要进行统计的数据列的列名
viewname传入希望建立的视图的名称,可以不填,默认为v_tmp
这么说很难让人明白..举个例子,引用一个帖子的数据
create table tab (
counter varchar(20),        -- 参加考试人数
subject varchar(20),        -- 科目
class varchar(20)          -- 班级
)
表数据:
counter  subject  class
36        英语      一班     
44        英语      二班
44        数学      二班
33        语文      一班
39        语文      三班
转换后:


相关文档:

oracle 表空间操作

oracle表空间操作详解
  1
  2
  3作者:   来源:    更新日期:2006-01-04 
  5
  6 
  7建立表空间
  8
  9CREATE TABLESPACE data01
 10DATAFILE '/ora ......

Oracle卸载干净方法

Oracle卸载卸不干净,Oracle彻底删除的办法(winxp)
Oracle卸载卸不干净,Oracle彻底删除的办法(winxp)
用oracle的卸载程序并不能完全卸载干净。如之前的命名的oracle sid 不能再使用。会提示sid存在。下面是在winxp下完全卸载oracle的方法。
1、开始->设置->控制面板->管理工具->服务 
  &nbs ......

oracle method

--single line method
select ascii('A') Big_A from dual;
select chr(65) A, chr(122) z, chr(223) ch3 from dual;
select concat('sigo','way') from dual;
select initcap('sigoway') from dual;
select instr('ababab','a',-1,2), instr('ababab','a',1,3) from dual;
select instrb('ababab','a',1,3) from dua ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号