oracle行列转换-多列转换成字符串
多列转换字符串可用||或concat函数。表数据如下:点击(此处)折叠或打开SQL> select * from t_col_row; ID C1 C2 C3---------- ---------- ---------- ----------...
oracle行列转换-行转列
接上篇文章。建表语句如下:点击(此处)折叠或打开SQL> create table t_row_col as 2 select id,\'c1\' cn,c1 cv from t_col_row 3 union all 4 select id,\'c2\' cn,c2 cv from t_col_row...
oracle行列转换-列转行
在itpub论坛看到一则贴子,行列转换总结,写的很全面。现将我的测试结果复上来,留着日后参考。附上测试脚本,有表及表中数据如下点击(此处)折叠或打开SQL> create table t_col_row( 2 id int, 3 c1 varchar2(10), &nbs...
start with connect by 用法
Oracle中的select语句可以用start with...connect by prior子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:select ... from <TableName>where <Conditional-1>start with <Conditional-2>connect by <Conditional-3>;<Conditional-1>:过滤条件,用于对返回的所有记录进行过滤。<Conditional...
根据某个字段值,产生想要的重复记录数
示例 ID NAME QTY 1 A 3 1 B 2 2 A 0 2 B 1 如何通过一条SQL得出以下结果呢? ID NAME QTY ROWNUM 1 A 3 1 1 A 3 2 1 A 3 3 1 B 2 1 1 B 2 2 2 B 1 1即根据QTY产生重复记录,产生的记录数=QTY值,如果为0不产生记录,QTY数值大小不固定[@more@]解决方法:下面的方法只是假设重复的最大记录为10条SQL> with test as 2 ( 3 select 1 ID, 'A' NAME , 3 QTY from dual union all 4 select 1
巧用grouping进行分组统计
grouping以前有遇到过,但不太记得,今天又在论坛刚到一则贴子,巧妙的运用了grouping进行分组统计与小计,下面记录如下:[@more@]例表数据如下:ID NAME GRADE1 a 101 a 151 b 51 b 101 c 202 a 5.....要求的结果是:对id,name分组合计,再对id求小计,要求小计时只对name 是a,b求和,不用UNION怎么写sql语句?结果集:ID NAME SUM(GRADE)1 a 251 b 151 c 201 小计 40 --ID=1时 name
巧用keep 进行分组
论坛贴子:已有数据:==========会计期 物料分类 期初 本期入 本期出 期末200901 C1 10 1 2 9200901 C2 10 1 3 8200902 C1 9 0 2 7200902 C2 8 1 2 7查询 200801-200912 的数据,查询结果:==========开始会计期 结束会计期 物料分类 期初 本期入 本期出 期末200901 200902 C1 10 1 4 7200901 200902 C2 10 2 5 7注意:期初,取查询范围内存在的最小会计期的
字符串截取从前几位到后几位
例:要截取一个字符串,从第一位到后第五位,该怎么操作???[@more@]方法一:SELECT REVERSE(SUBSTR(REVERSE('PENGWZHANIU'), 5)) STR FROM DUAL;--测试结果:pengwzh方法二:SELECT (CASE WHEN LENGTH(&STR) < 5 THEN &STR ELSE SUBSTR(&STR, 1, LENGTH(&STR) - 4) END) STR FROM DUAL;--测试结果:pengwzh说明:方法一是利用二次反向取,巧妙取出了第一位到后五位的字符串,方法二则先判断字符串长度,如果不够五位则全取,否则从第一位开始截取,截取字符个数为(整个长度-4)位
表连接时update与delete操作需注意的地方
刚刚在论坛上又看到一则很老的精华贴子,经测试后越发觉的好,于是总结了下,发上来了,以后备用,呵~~~[@more@]一. 表连接的update测试 /*******************先看下面的测试******************/SQL> drop table test1;表已删除。SQL> drop table test;表已删除。SQL> create table test(a number,b number,c number ,d varchar2(6));表已创建。SQL> insert into test values(1,1,1,'1');已创建 1 行。SQL> insert into test values(2,2,2,'2');已创建 1 行。SQL> insert into test values(3,3,3,'3');已创建 1
translate函数
Translate函数与replace函数及其相似,都是用来做字符替换的,但又有所区别,replace是对整个字符替换为指定的字符,但translate是一个字符一个字符对应替换,区别看下面的sql[@more@]SQL> select translate('abc3243dbc','abc','efg') col from dual;COL----------efg3243dfgSQL> select replace('abc3243dbc','abc','efg') col from dual;COL----------efg3243dbc从上面的sql可以看出,replace函数是将整个字符abc替换为efg,而translate是将a替换为e,b替换为f,c替换为g。下面例举translate的其它几种情况SQL> select translat
巧用row_number() over()函数,选取重复记录中想要的值
刚在论坛看到一个贴子,感觉不错,就拿来测试了下,呵~~[@more@]贴子内容 如何从某字段重复的多条记录条件查找 求一个SQL语句写法。 现有以问题,表数据如下: A B C 1 a x 1 a y 1 a z 2 a x 2 a z 3 a x 需要查询结果:如果A字段存在相同值,且重复记录中C字段存在值为y的记录,只取C字段值为Y的记录,如果重复记录不存在C字段为Y的记录,任取一条A字段重复的记录。 如上表所需查询结果为: A B C 或者 A B C 1 a y 1 a y 2 a x 2 a z 3 a x 3 a x 下面是解答方法:SQL> edit; 已写入 file afiedt.buf1 create tabl
oracle分析函数,keep and over解说
今天又学到了一个新的分析函数了,over()函数早就接触过,但keep和over结合用还是第一次见,详情见下面内容了,呵~~[@more@]先看下面的测试例子: --创建测试表 create table test as select 1 ID, 111 mc, 1 sl from dual union select 1, 222, 1 from dual union select 1, 333, 2 from dual union select 1, 555, 3 from dual union select 1, 666, 3 from dual union select 2 ,111 ,1 from dual union select 2 ,222 ,1 from dual union select 2 ,333, 2 from dual union select 2 ,555, 2 from dual; SQL> select
树型结构start with..........connect by prior
刚刚一同事问我,知道一个行政区划代码,如何求这个行政区划的上级和下级所有行政区划,脑海中有start with...prior这种树型求法,查看之前的笔记后,拿监管的pa50做测试如下:[@more@]一.求株洲市的上级行政区划 select a.aab301,a.apa133 from pa50 a start with a.aab301 = '430200' connect by a.aab301 = prior a.apa132;--运行结果: AAB301 APA1331 430200 株洲市2 430000 湖南省3 100000 全国二.求株洲市的下级行政区划 select a.aab301,a.apa133 from pa50 a start with a.aab301 = '430200' con
学习chr(0)
看论坛里一则“chr(0)的奇特用法”的贴子,有点意思~~[@more@]在pl/sql develop中测试chr(0)时,后面的内容不显示,测试结果如下:select 'aaa' || chr(0) || 'bbb' from dual; --aaaselect length('aaa' || chr(0) || 'bbb') from dual; --7select substr('aaa' || chr(0) || 'bbb', 5, 3) from dual; --bbbselect substr('aaa' || chr(0) || 'bbb', 2, 5) from dual; --aa但是在orcle自带的sqlplus中测试结果却不同.SQL> select 'aaa'||chr(0)||'bbb' from dual;'AAA'||-------aaa bbbSQL> select substr('aaa' || chr(0) || 'bbb',