Oracle纵向变横向,多行变一行

取处方下的药品大类,以

处方    药品大类

a001   中药.西药,中成药的   的格式显示

/*处方与药品大类的对应 周璇球 20130829*/
SELECT SCFXX01,
replace(trim(max(sys_connect_by_path(SJCXX02, ' '))),' ',',') s_drug_types
FROM(
SELECT YYGLE61.SCFXX01,
YYGL101.SJCXX02,
lag(SJCXX02) over(partition by YYGLE61.SCFXX01 order by SJCXX02) l_SJCXX02
FROM YYGLE61,yygle62,YYGL110,YYGL101
where yygle61.scfxx01 = yygle62.scfxx01
and YYGLE62.SCFMX03 = YYGL110.SYPXX01(+)
and YYGL110.SYPXX14 = YYGL101.SJCXX01(+)
) a
start with l_SJCXX02 is null
connect by nocycle SCFXX01 = prior SCFXX01 and prior SJCXX02 = l_SJCXX02
GROUP BY SCFXX01;

根据原型

select name, max(sys_connect_by_path(report, '  ')) s_report
from
(select name, report, lag(report) over(partition by name order by report) l_report
from tb)
start with l_report is null
connect by name = prior name and prior report = l_report
group by name
order by name;

发现将视图放在内连接里边比在查询列中用子查询的速度要快

(快)

select
max(a.s_drug_types) as s_drug_types
FROM YYGLE61,yygle62,V_LDMZ_PRES_DRUG_TYPES a
where yygle61.scfxx01 = yygle62.scfxx01
and yygle61.scfxx01 = a.scfxx01

(慢)

select
(select a.s_drug_types
from V_LDMZ_PRES_DRUG_TYPES a
where yygle61.scfxx01 = a.scfxx01) as s_drug_types
FROM YYGLE61,yygle62
where yygle61.scfxx01 = yygle62.scfxx01

网上查到的

使用LAG和LEAD函数统计

Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。以下是LAG和LEAD的例子:

SQL> select  year,region,profit ,lag (profit,1) over  (order by year)

2       as last_year_exp from test;

YEAR REGION      PROFIT LAST_YEAR_EXP

---- ------- ---------- -------------

2003 West            88

2003 West            88            88

2003 Central        101            88

2003 Central        100           101

2003 East           102           100

2004 West            77           102

2004 East           103            77

2004 West            89           103

SQL> select  year,region,profit ,lead (profit,1) over  (order by year)

2       as next_year_exp from test;

YEAR REGION      PROFIT NEXT_YEAR_EXP

---- ------- ---------- -------------

2003 West            88            88

2003 West            88           101

2003 Central        101           100

2003 Central        100           102

2003 East           102            77

2004 West            77           103

2004 East           103            89

2004 West            89

Lag函数为Lag(exp,N,defval),defval是当该函数无值可用的情况下返回的值。Lead函数的用法类似。

Lead和Lag函数也可以使用分组,以下是使用region分组的例子:

SQL> select  year,region,profit ,

2  lag (profit,1,0) over  (PARTITION BY region order by year)

3       as last_year_exp from test;

YEAR REGION      PROFIT LAST_YEAR_EXP

---- ------- ---------- -------------

2003 Central        101             0

2003 Central        100           101

2003 East           102             0

2004 East           103           102

2003 West            88             0

2003 West            88            88

2004 West            77            88

2004 West            89            77

3.创建Oracle Job

 在comand窗口里边

variable job number;

begin
sys.dbms_job.submit(job => :job,
what => 'print;',
next_date => to_date('01-01-4000', 'dd-mm-yyyy'),
interval => 'trunc(sysdate+1)+1/288');
commit;
end;
/

print是存储过程

带参数的存储过程Job

variable job number;

begin
sys.dbms_job.submit(job => :job,
what => 'yygl_yktjz(trunc(sysdate));',
next_date => to_date('01-01-4000', 'dd-mm-yyyy'),
interval => 'trunc(sysdate+1)+1/288');
commit;
end;
/
begin
sys.dbms_job.submit(job => :job1,
what => 'declare s1 varchar2(200); s2 varchar2(200); begin p_test.usp_test_jobincs(s1,s2); end;',
next_date => sysdate,
interval => 'sysdate+1/1440');
commit;
end;
/

Oracle去换行,去空格等

/*去除换行*/
update zhzl_address t set t.add_administration_num=replace(t.add_administration_num,chr(10),'');
/*去掉回车*/
update zhzl_address t set t.add_administration_num=replace(t.add_administration_num,chr(13),'');
/*去掉空格*/
update zhzl_address t set t.add_administration_num=trim(t.add_administration_num);
select rowid,yyglk60.*
from yyglk60
where INSTR(syycs04,CHR(32)) > 0
or INSTR(syycs01,CHR(32)) > 0
OR INSTR(syycs02,CHR(32)) > 0
OR INSTR(syycs03,CHR(32)) > 0
OR INSTR(syycs05,CHR(32)) > 0
OR INSTR(syycs04,CHR(10)) > 0
or INSTR(syycs01,CHR(10)) > 0
OR INSTR(syycs02,CHR(10)) > 0
OR INSTR(syycs03,CHR(10)) > 0
OR INSTR(syycs05,CHR(10)) > 0
;
select *
from yyglk60
where INSTR(syycs04,CHR(9)) > 0
or INSTR(syycs01,CHR(9)) > 0
OR INSTR(syycs02,CHR(9)) > 0
OR INSTR(syycs03,CHR(9)) > 0
OR INSTR(syycs05,CHR(9)) > 0
update yyglk60
set syycs04 = replace(syycs04,' ','') ,
syycs01 = replace(syycs01,' ',''),
syycs02 = replace(syycs02,' ',''),
syycs03 = replace(syycs03,' ',''),
syycs05 = replace(syycs05,' ',''),
syycs06 = replace(syycs06,' ','')
where syycs04 like '% %' or syycs01 like '% %' or syycs02 like '% %' or syycs03 like '% %';

替换空格:

update yygl120 set szzxm24 = trim(szzxm24) where  INSTR(szzxm24,' ') > 0   ;

Oracle小技巧的更多相关文章

  1. Oracle 小技巧

    Oracle小技巧 ###add at 18-10-11 1  ed 在sqlplus当中 如果前一条语句输入有误的话 可以输入ed再回车.在进行编辑 输入ed后有弹窗,可以对之前的输入语句进行编辑 ...

  2. toad for oracle 小技巧

    在SQL*LOADER 工具上(或者称为SQLLDR,读为:“sequel loader”),因为它仍然是装载数据的主要方法,SQLLDR 能够在极短的时间内装 载庞大数量的数据. 我也是初使用,理解 ...

  3. Oracle小技巧_不同表空间不同用户导入导出数据dmp

    [博主注:数据库方面 ITPUB网站及博客内容非常丰富]   转载来源ITPUB 博客 经常有人会问:原来的数据在USERS表空间里面,我想把它IMP进APP表空间,我已经修改了目的用户的默认表空间, ...

  4. 关于oracle的sqlplus的另一些小技巧

    执行脚本的命令在上一节已经讲过,不再重复. sqlplus user/password@ip:port/servicename @/path/sqltest.sql; sqltest的内容及注释: - ...

  5. Java在处理大数据的时候一些小技巧

    Java在处理大数据的时候一些小技巧 发布时间:2013-05-09 00:00:00 来源:中国IT实验室 作者:佚名   关键字:Java 众所周知,java在处理数据量比较大的时候,加载到内存必 ...

  6. Django中的ORM框架使用小技巧

      Django中的ORM框架使用小技巧 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. Django对各个数据提供了很好的支持,包括PostgreSQL,MySQL,SQLite ...

  7. 杂谈---小故事小道理,面试中的小技巧(NO.2)

    本篇是接着上一篇面试随笔的,上一次有猿友反应写的有些“扯淡”,LZ思来想去最大的原因可能是由于上一章写的全是一些大忌,既然是大忌,那么在现实当中发生的概率还是相对较小的,大部分人还是很少在面试中犯如此 ...

  8. PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键

    PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键 1. 附加:工具栏不见了 调色板(Palette)快捷工具栏不见了PowerDesigner ...

  9. 「Python-Django」Django中使用数据库的 9 个小技巧

    Django 中使用数据库的 9 个小技巧. 1. 过滤器聚合 在 Django 2.0 之前,如果你想得到“用户总数”.“活跃用户总数”等信息时,你不得不使用条件表达式. Django 2.0 中, ...

随机推荐

  1. zedboard如何从PL端控制DDR读写(一)

    看了一段时间的DDR手册,感觉大体有一点了解了,想要实际上板调试,然而实验室可用的开发板不多,拿了一块zynq板看了看,DDR确实有,但是已经集成了控制器,而且控制器还放到了PS端,PL只能通过AXI ...

  2. JavaScript for...in 语句

    JavaScript for...in 语句 for...in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作). for ... in 循环中的代码每执行一次,就会对数组的元素或者 ...

  3. grub2

    手工启动 set  root(hd0,msdos7) linux  /boot/vmlinuz-3.9.8-300.fc19.i686.PAE  root=/dev/sda7 initrd  /boo ...

  4. javaSE第三天

    第三天    12 1:运算符(掌握)    12 (1)算术运算符    12 (2)赋值运算符    12 (3)比较运算符    13 (4)逻辑运算符    13 (5)位运算符(了解)    ...

  5. .NET 中的DateTime

    DateTime简介 DateTime是.NET中的时间类型,可以通过DateTime完成诸如获取当前的系统时间等操作.DateTime在.NET中是一个结构体,而并不是一个类. 如上图所示,这个图标 ...

  6. .net4.0注册到IIS

    IIS和.netfw4.0安装顺序是从前到后,如果不小心颠倒了,无所谓. 打开程序-运行-cmd:输入一下命令重新注册IIS C:\WINDOWS\Microsoft.NET\Framework\v4 ...

  7. DPDK内存管理-----(三)rte_malloc内存管理

    rte_malloc()为程序运行过程中分配内存,模拟从堆中动态分配内存空间. void * rte_malloc(const char *type, size_t size, unsigned al ...

  8. 复杂的databinding接受Ilist作为数据源

    Combobox控件绑定数据源时,List<T>可以作为数据源,但是List<String,Object> 不存在,我们有时候需要用Dictionary<String,o ...

  9. Log4net使用笔记

    Log4net使用笔记   编写人:CC阿爸 2013-10-29 近来在处理项目时候,想将系统的操作日志以文本的形式记录下来,方便对系统操作记录进行追踪. 经过在网上搜索部分解决方案,大致可以归纳如 ...

  10. pthreads多线程数据采集

    以前使用curl的多线程并不是真正的多线程,只是一种模拟的多线程,现在使用pthreads来实现真正意义上的多线程. 下载: windows下: http://windows.php.net/down ...