Oracle SQL内置函数
Oracle内置SQL函数主要分为一下类别:数字函数、字符函数、日期函数、转换函数、集合函数、分析/聚合函数
本手册所有示例均以TIPTOP GP 5.10 ERP数据库表为基础演示。数据字典下载地址:http://pan.baidu.com/s/1jG1PGF0
1、数字函数
abs(n):返回数字n的绝对值
ceil(n):返回>=数字n的最小整数
floor(n):返回<=数字n的最大整数
round(n,[m]):四舍五入运算,如果m缺省则四舍五入到整数位
m<0,四舍五入到小数点的前m位,m>0四舍五入到小数点的后m位
trunc(n,[m]):截取数字,如果m缺省则将小数位截去
m<0,截取到小数点的前m位,m>0截取到小数点的后m位
--demo:abs()、ceil()、floor()、trunc()
SELECT abs(-2.3),
ceil(-2.6),ceil(2.6),
floor(-2.6),floor(2.6),
round(-666.588),round(-666.588,2),round(-666.588,-2),
trunc(-666.588),trunc(-666.588,2),trunc(-666.588,-2)
FROM dual
--结果:
ABS(-2.3) 2.3
CEIL(-2.6) -2
CEIL(2.6) 3
FLOOR(-2.6) -3
FLOOR(2.6) 2
ROUND(-666.588) -667
ROUND(-666.588,2) -666.59
ROUND(-666.588,-2) -700
TRUNC(-666.588) -666
TRUNC(-666.588,2) -666.58
TRUNC(-666.588,-2) -600
sqrt(n):返回数字n(n必须大于0)的平方根
power(n,m):返回数字n的m次幂,底数n和指数m都可以是任意数字,但是如果底数n为负数则指数m必须为正数
exp(n):返回e(2.71828183....)的n次幂
ln(n):返回数字n(n必须大于0)的自然对数
log(n,m):返回底数为n(除0及1的正整数)的m(任何正整数)对数
mod(n,m):返回数字n/m的余数,如果数字m=0则返回n
--demo:sqrt(),power(),exp(),ln(),log(),mod()
SELECT sqrt(4),power(2,3),exp(1),ln(10),log(2,8),mod(5,2)
FROM dual
--结果:
SQRT(4) 2
POWER(2,3) 8
EXP(1) 2.71828182845905
LN(10) 2.30258509299405
LOG(2,8) 3
MOD(5,2) 1
cos(n):返回数字n(弧度单位表示的角度值)的余弦值
cosh(n):返回数字n的双曲余弦值
acos(n):返回数字n的反余弦值,求的结果单位为弧度,n的范围为 -1 < n < 1
sin(n):返回数字n(弧度单位表示的角度值)的正弦值
sinh(n,m):返回数字n的双曲正弦值
asin(n,m):返回数字n的反正弦值,求的结果单位为弧度,n的范围为 -1 < n < 1
tan(n):返回数字n(弧度表示的角度值)的正切值
tanh(n):返回数字n的双曲正切值
atan(n):返回数字n的反正切值,求的结果单位为弧度,n的范围任意数值
atan(n,m):返回数字n/m的反正切值,求的结果单位为弧度,你可以为任意数值,m不可为0
--三角函数应用demo:
SELECT cos(0.5),cosh(2),acos(1),
sin(0.5),sinh(2),asin(0),
tan(0.5),tanh(2),atan(8),atan(16/2)
FROM dual
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2、字符函数
ascii(n):返回字符c的ascii值
chr(n):将ascii值转换为对应的字符
initcap(s):将字符串s所有的单词(依空格或非字母字符划分单词区间)的首字母大写,其余小写
lower(s):将字符串s中所有的字符转换为小写
upper(s):将字符串s中所有的字符转换为大写
concat(s1,s2):将字符串s2连接在s1后面,等同于操作符||
length(s):将返回字串s的长度,返回的长度包括其中的所有空格(尾部空格也算);如果s为null,则返回null
--字符函数demo:
SELECT ascii('A'),chr(65),concat('Hello','World'),
initcap('hello woRld'),
lower('HeLLo woRld'),upper('HeLLo woRld'),
length('HeLLo woRld'),length('李艺辉')
FROM dual
--结果:
ASCII('A') 65
CHR(65) A
CONCAT('HELLO','WORLD') HelloWorld
INITCAP('HELLOWORLD') Hello World
LOWER('HELLOWORLD') hello world
UPPER('HELLOWORLD') HELLO WORLD
LENGTH('HELLOWORLD') 11
LENGTH('李YI辉') 4
lpad(s1,n,s2):在字串s1的左端填充字串s2,直至填充后的s1的总长度为n
如果不指定s2则默认为空格
如果s1的长度>n,则直接返回s1左端的n个字符
rpad(s1,n,s2):在字串s1的右端填充字串s2,直至填充后的s1的总长度为n
如果不指定s2则默认为空格
如果s1的长度>n,则直接返回s1左端的n个字符
--lpad、rpad
SELECT lpad('a',10,'8'),lpad('LaaaaaaR',6,'8'),
rpad('a',10,'8'),rpad('LaaaaaaR',6,'8')
FROM dual
--结果:
lpad('a',10,'8') 888888888a
lpad('laaaaaar',6,'8') laaaaa
rpad('a',10,'8') a888888888
rpad('laaaaaar',6,'8') laaaaa
instr(s1,s2,n,m):取得子串s2在字串s1中的位置
n表示在s1中开始搜索的位置,m表示字串s2出现的次数
如果n为负数,则表示从尾部开始搜索,n与m默认为1
SELECT instr('888terryterry','terry',1,1) ,instr('888terryterry','terry',1,2),
instr('888terryterry','terry',-1,1),instr('888terryterry','terry',-1,2)
FROM dual
--结果:
instr('888terryterry','terry',1,1) 4
instr('888terryterry','terry',-1,1) 9
instr('888terryterry','terry',1,2) 9
instr('888terryterry','terry',-1,2) 4
substr(s1,m,n):取得字串s1从m开始,长度为n的子串,m>0表示从头开始搜索,m<0表示从尾开始
SELECT substr('李藝輝',1,2),substr('terry',-4,3)
FROM dual
--结果:
substr('李藝輝',1,2) 李藝
substr('terry',-4,3) err
ltrim(s1,set):从左端开始逐一取得字串s1左端包含的set中的任何字符
当遇到不是set中的字符是,则结束并返回剩余结果
rtrim(s1,set):从右端开始逐一取得字串s1右端包含的set中的任何字符
当遇到不是set中的字符是,则结束并返回剩余结果
trim(c FROM s2):从字串s2的头部、尾部、或两端截去字符c(c只能够是一个字符)
当遇到不是set中的字符是,则结束并返回剩余结果
SELECT ltrim('terry','t'),ltrim('terry','ter'),ltrim('terry','e'),
rtrim('terry','y'),rtrim('terry','ry'),rtrim('terry','yre'),
trim('e' from 'terry'),trim('t' from 'terry'),trim('y' from 'terryy')
FROM dual
--结果:
ltrim('terry','t') erry
ltrim('terry','ter') y
ltrim('terry','e') terry
rtrim('terry','y') terr
rtrim('terry','ry') te
rtrim('terry','yre') t
trim('e'from'terry') terry
trim('t'from'terry') erry
trim('y'from'terryy') terr
replace(s1,s2,s3):将s1字串中的子串s2用s3替代,如果s2为null则返回原来的字串s1
注意:如果s3为null,则会去掉子串s2
SELECT replace('李藝輝-TERRY','李藝輝','諸葛錢好'),
replace('李藝輝-TERRY','李藝輝')
FROM dual
--结果:
replace('李藝輝-TERRY','李藝輝','諸葛錢好') 諸葛錢好-TERRY
replace('李藝輝-TERRY','李藝輝') -TERRY
translate(s1,froms,tos):将字符串s1按照froms和tos的对应关系进行转换
SELECT translate('terry','abcdefgxyz','8888888666')
FROM dual
--结果:
translate('terry','abcdefgxyz','8888888666') t8rr6
regexp_substr(s1,pattern,position,occurrence,match_parameter):
按照正则表达式pattern从s1字串中的position位置开始
截取第occurrence次出现的匹配pattern的字串,matche_parameter为默认匹配的文本
position,occurrence,matche_parameter 默认为1,1," "
regexp_replace(s1,pattern,position,occurrence,match_parameter):
正则表达式扩展replace的功能,用于按照特定的表达式pattern的规则替换字串串s1
s1指定替换字符串,position指定起始搜索位置
occurrence指定替换出现的第n个字符串
matche_parameter指定默认匹配操作的文本串
regexp_like():用正则表达式扩展后的like
regexp_instr():用正则表达式扩展后的instr
SELECT regexp_substr('我的郵箱[email protected]','[[:lower:]]{1,}+@{1}+[[:alnum:]]{1,}+\.{1}+[[:alpha:]]{1,}'),
regexp_replace('這個屌http://www.space.com.tw/product','http://([[:alnum:]]+\.?){3,4}+[[:print:]]{1,}','www.terry.com')
FROM dual
regexp_substr('我的郵箱[email protected]','[[:lower:]]{1,}+@{1}+[[:alnum:]]{1,}+\.{1}+[[:alpha:]]{1,}')
--结果: [email protected]
regexp_replace('這個屌http://www.space.com.tw/product','http://([[:alnum:]]+\.?){3,4}+[[:print:]]{1,}','www.terry.com')
--结果:這個屌www.terry.com
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3、日期函数
sysdate:返回系统当前日期时间
systimestamp:返回系统当前日期时间和时区
current_date:返回当前回话时区所对应的日期和时间
current_timestamp:返回当前回话时区所对应的日期时间
localtimestamp:返回当前回话时区所对应的日期时间
systimestamp:返回系统当前日期时间和时区
sessiontimezone:返回当前回话所在的时区
dbtimezone:返回资料库所在的时区
SELECT sysdate,systimestamp,current_date,current_timestamp,
localtimestamp,sessiontimezone,dbtimezone
FROM dual
--结果:
SYSDATE 2015/3/25 13:29:38
SYSTIMESTAMP 25-3月 -15 01.29.38.867634 下午 +08:00
CURRENT_DATE 2015/3/25 13:29:38
CURRENT_TIMESTAMP 25-3月 -15 01.29.38.867641 下午 +08:00
LOCALTIMESTAMP 25-3月 -15 01.29.38.867641 下午
SESSIONTIMEZONE +08:00
DBTIMEZONE +08:00
add_months(d,n):返回指定日期d之后(或前)的n個月所對應的日期時間;n>0:之后,n<0:之前
extract():用於從特定的日期時間值里取出所需要的特定數據(如日期、月份、日、時間等)
last_day(d):用於返回指定日期所在月份的最後一天
next_day(d,char):返回指定日期后的一個工作日(由char指定)所對應的日前
round(d[,fmt]):返回日期時間的四舍五如結果,如果fmt指定年度則7月1日為分界線
如果fmt指定月則16日為分界線,如果fmt指定天則中午12:00為分界線
trunc(d[,fmt]):用於截斷日期時間數據,如果fmt指定年度則結果為本年的1月1日
如果fmt指定月則結果為本月1日,如果fmt空則結果為截取日期時間數據中的日期
SELECT sysdate,add_months(sysdate,4),add_months(sysdate,-4),
extract(MONTH from sysdate),last_day(sysdate),next_day(sysdate,'星期一'),
round(sysdate,'YEAR'),round(sysdate,'MONTH'),round(sysdate,'DAY'),round(sysdate),
trunc(sysdate,'YEAR'),trunc(sysdate,'MONTH'),trunc(sysdate,'DAY'),trunc(sysdate)
FROM dual
--结果:
SYSDATE 2015/3/25 13:40:14
ADD_MONTHS(SYSDATE,4) 2015/7/25 13:40:14
ADD_MONTHS(SYSDATE,-4) 2014/11/25 13:40:14
EXTRACT(MONTHFROMSYSDATE) 3
LAST_DAY(SYSDATE) 2015/3/31 13:40:14
NEXT_DAY(SYSDATE,'星期一') 2015/3/30 13:40:14
ROUND(SYSDATE,'YEAR') 2015/1/1
ROUND(SYSDATE,'MONTH') 2015/4/1
ROUND(SYSDATE,'DAY') 2015/3/29
ROUND(SYSDATE) 2015/3/26
TRUNC(SYSDATE,'YEAR') 2015/1/1
TRUNC(SYSDATE,'MONTH') 2015/3/1
TRUNC(SYSDATE,'DAY') 2015/3/22
TRUNC(SYSDATE) 2015/3/25
to_timestamp(chr[fmt[,nls_param]]):將符合特定日期和時間按格式的字符串轉變為TIMESTAMP類型
--查詢 2015-03-25 11:30:00 時間點時 oay_file 記錄 [时间搓不能>当前时间点 且 不能太早]
select * from oay_file as of timestamp to_timestamp('2015-03-25 11:30:00','YYYY-MM-DD HH24:MI:SS')
month_between(d1,d2):返回日期d1與d2之間相差的月份數
如果d1 --结果: SYSDATE 2015/3/25 13:49:40 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 4、数据库系统相关配置 sys_context(context,attribute):返回應用上下文特定屬性,其中context指定應用上下文名,attribute指定對應的屬性 --结果: TERMINAL PCS13098 UID:返回當前會話用戶的ID號 --结果: UID 55 sys_guid():用於生成類型為RAW的16字節的唯一標識符,每次調用該函數都會生成不同的RAW數據 --结果: SYS_GUID() 1217A841ED2B6437E0530900A8C0B6F8 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 5、复杂单行函数 coalesce(expr1[,expr2]...):返回運算式中第一個not null運算式的結果 decode(expr,search1,result[,search2,result2,..][,default]):返回匹配于特定運算式的結果 如果search1匹配expr則返回result1,如果如果search2匹配expr則返回result2 --结果: coalesce('','','terry','zhanna') terry greatest(expr1[,expr2]...):返回列表運算式expr1,expr2,...中值最大的一個 least(expr1[,expr2]...):返回列表運算式expr1,expr2,...中值最小的一個 nullif(expr1,expr2):比較expr1和expr2,如果二者相等則返回null,否則返回expr1 --结果: sys_connect_by_path(column,char):用於返回從根到子節點的列值路進,值適用于層次查詢 --结果: |--1300-00677002 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 6、分析聚合函数 rank(expr1,expr2,...) within group(order by col1,col2,...):返回特定數值在統計數值中所佔據的等級,expr1,expr2,...必須為常數 --结果: RANK_LEVEL DENSE_RANK_LEVEL PERCENT_QUTO percentile_cont(percent_expr)within group(order by expr):返回在計級別中處於某個百分點的特定數值(按照連續分佈模型確定) first:取得排序等級的第一級,然後使用分組函數匯總該等級的數據,該函數不能夠單獨使用,必須與其它分組函數結合使用 --结果: AP金額最多等級中的最小已付 AP金額最多等級中的最大已付 over()視窗函數 --结果: --结果: row_number() 、rownum、rank()、dense_rank()區別說明 row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序) rank():是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内) dense_rank():是连续排序,有两个第二名时仍然跟着第三名.相比之下row_number是没有重复值的. rank()與dense_rank()及row_number()不同點說明 rank()依薪水排序 dense_rank()依薪水排序 row_number()依薪水排序 group_id():區分分組結果中的重複行 --结果: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --结果: 統計'Tri-Net','AMBER -W','Belkin-C','GTC','SAN SHIN'客戶各月份接單金額 要求輸出格式為 接單月份 Tri-Net AMBER -W Belkin-C GTC SAN SHIN 2011/08 接單金額 接單金額 接單金額 接單金額 接單金額 …. …. ….select sysdate,months_between(sysdate,to_date('2012/06/30','YYYY/MM/DD'))
from dual
MONTHS_BETWEEN(SYSDATE,TO_DATE 32.8572954002389
select SYS_CONTEXT('USERENV','TERMINAL') terminal,
SYS_CONTEXT('USERENV','LANGUAGE') language,
SYS_CONTEXT('USERENV','SESSIONID') sessionid,
SYS_CONTEXT('USERENV','INSTANCE') instance,
SYS_CONTEXT('USERENV','ENTRYID') entryid,
SYS_CONTEXT('USERENV','ISDBA') isdba,
SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory,
SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency,
SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar,
SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format,
SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language,
SYS_CONTEXT('USERENV','NLS_SORT') nls_sort,
SYS_CONTEXT('USERENV','CURRENT_USER') current_user,
SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid,
SYS_CONTEXT('USERENV','SESSION_USER') session_user,
SYS_CONTEXT('USERENV','SESSION_USERID') session_userid,
SYS_CONTEXT('USERENV','PROXY_USER') proxy_user,
SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid,
SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain,
SYS_CONTEXT('USERENV','DB_NAME') db_name,
SYS_CONTEXT('USERENV','HOST') host,
SYS_CONTEXT('USERENV','OS_USER') os_user,
SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name,
SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address,
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol,
SYS_CONTEXT('USERENV','BG_JOB_ID') bg_job_id,
SYS_CONTEXT('USERENV','FG_JOB_ID') fg_job_id,
SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') authentication_type,
SYS_CONTEXT('USERENV','AUTHENTICATION_DATA') authentication_data
from dual
LANGUAGE SIMPLIFIED CHINESE_CHINA.AL32UTF8
SESSIONID 26273213
INSTANCE 1
ENTRYID
ISDBA FALSE
NLS_TERRITORY CHINA
NLS_CURRENCY RMB
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
NLS_SORT BINARY
CURRENT_USER SZPF
CURRENT_USERID 55
SESSION_USER SZPF
SESSION_USERID 55
PROXY_USER
PROXY_USERID
DB_DOMAIN
DB_NAME topprod
HOST DOMAIN\PCS13098
OS_USER terrylee
EXTERNAL_NAME
IP_ADDRESS 192.168.5.227
NETWORK_PROTOCOL tcp
BG_JOB_ID
FG_JOB_ID 0
AUTHENTICATION_TYPE DATABASE
AUTHENTICATION_DATA
USER:返回當前會話所對應資料庫用戶名
USERENV(parameter):返回當前會話上下文的屬性信息
其中parameter可取值:ISDBA、LANGUAGE、TERMINAL、CLIENT_INFOselect uid,user,userenv('ISDBA') from dual
USER SZPF
USERENV('ISDBA') FALSEselect sys_guid(),sys_guid() from dual
SYS_GUID() 1217A841ED2C6437E0530900A8C0B6F8
依次類推,如果沒有任何匹配關係則返回defaultselect coalesce('','','terry','zhanna'),
decode('M','W','girl','M','boy','person')
from dual
decode('M','W','girl','M','boy','person') boy
在比較之前,expr2等項會被隱含地轉換為expr1的時候據類型
在比較之前,expr2等項會被隱含地轉換為expr1的時候據類型select greatest('terry','888','zhanna','666'),
least('terry','888','zhanna','666'),
nullif('terry','zhanna'),nullif('1','1')
from dual
greatest('terry','888','zhanna','666')
zhanna
nullif('terry','zhanna')
terry
least('terry','888','zhanna','666')
666
nullif('1','1')
--展成品料號TE902C BOM下階元件
select lpad(' ',2*level-1)||sys_connect_by_path(bmb03,'|--') "TE902C展BOM元件"
from bmb_file
start with bmb01 = 'TE902C'
connect by prior bmb03 = bmb01
|--1300-00677002|--3230-00677000
|--1300-00677002|--5410-TE902C02
|--1300-00677002|--LPLA10002
|--1300-00677002|--LPLA10002|--1800-00100117
|--1300-00677002|--LPLA10002|--1800-00100117|--2101-01002000
|--1300-00677002|--LPLA10002|--1800-00100117|--2101-02001034
|--1300-00677002|--LPLA10002|--1800-00100118
|--1300-00677002|--LPLA10002|--1800-00100118|--2102-02003001
|--1300-00677002|--LPLA10002|--1800-00100118|--2230-05005000
|--1300-00677002|--LPLA10002|--1800-00200300
|--1300-00677002|--LPLA10002|--1800-00200300|--2101-04012016
|--1300-00677002|--LPLA10002|--1800-00200300|--2102-02003001
|--1300-00677002|--LPLA10002|--1800-00200311
|--1300-00677002|--LPLA10002|--1800-00200311|--2101-04012016
|--1300-00677002|--LPLA10002|--1800-00200325
|--1300-00677002|--LPLA10002|--1800-00200325|--2101-04012016
|--1300-00677002|--LPLA10002|--1800-00200325|--2230-02002001
|--1300-00677002|--LPLA10002|--1800-00200409
|--1300-00677002|--LPLA10002|--1800-00200409|--2101-04012016
|--1300-00677002|--LPLA10002|--1800-00200409|--2230-02002001
|--1300-00677002|--LPLA10002|--2101-02001035
|--4410-TE902C00
|--6110-11001000
dense_rank(expr1,expr2,...) within group(order by expr1,expr2,...):返回特定數值在一組行數據中的等級
percent_rank(expr1,expr2,...) within group(order by expr1,expr2,...):返回特定數值在統計數值在統計級別中所占的比例select rank(1530.100000) within group(order by apa31) rank_level,
dense_rank(1530.100000) within group(order by apa31) dense_rank_level,
percent_rank(1530.100000) within group(order by apa31) percent_quto
from ds.apa_file
2254 1159 0.312136326
percentile_disc(percent_expr)within group(order by expr):返回在計級別中處於某個百分點的特定數值(按照離散分佈模型確定)
last:取得排序等級的最後一級,然後使用分組函數匯總該等級的數據,該函數不能夠單獨使用,必須與其它分組函數結合使用select min(apa35) keep (dense_rank first order by apa31 desc) "AP金額最多等級中的最小已付",
max(apa35) keep (dense_rank first order by apa31 desc) "AP金額最多等級中的最大已付"
from ds.apa_file
3500000 3500000
over ([partition by col1] order by col2) ) 表示依col1分組,依col2在分組類排序
over函數不能夠單獨使用,必須和其它的分組/分析函數配合使用
over函數不可用在where子句中--統計2G88與2G60部門2012-04月薪資分配
select cqk09 姓名,cqk05 部門,cqk30 薪水,
sum(cqk30) over(partition by cqk05 order by cqk09) 部門薪水連續加總,
sum(cqk30) over(partition by cqk05) 部門薪水總計,
100*(round(cqk30/sum(cqk30) over(partition by cqk05),5)) "個人薪水占部門份額%",
sum(cqk30) over(order by cqk05,cqk09) 所有薪水連續加總,
sum(cqk30) over() 所有薪水總計,
100*(round(cqk30/sum(cqk30) over(),5)) "個人薪水占總和份額%"
from cqk_file
where cqk03=2012 and cqk031 = 4 and cqk05 in ('2G88','2G60')
姓名
部門
薪水
部門薪水連續加總
部門薪水總計
個人薪水占部門份額%
所有薪水連續加總
所有薪水總計
個人薪水占總和份額%
AX
2G60
33086
33086
138382
23.909
33086
335666
9.857
BX
2G60
77884
110970
138382
56.282
110970
335666
23.203
CX
2G60
27412
138382
138382
19.809
138382
335666
8.166
DX
2G88
56273
56273
197284
28.524
194655
335666
16.765
SS
2G88
70994
127267
197284
35.986
265649
335666
21.15
IP
2G88
39187
166454
197284
19.863
304836
335666
11.674
DS
2G88
30830
197284
197284
15.627
335666
335666
9.185
--row_number()結合over排序統計2012-04薪資水平中各部門最高的2位
-- select cqk09 姓名,cqk05 部門,cqk30 薪水,
-- row_number() over(partition by cqk05 order by cqk30 desc) as salary_order
-- from cqk_file
-- where cqk03=2012 and cqk031 = 4 and salary_order<=2 --此處無法引用salary_order,直接用over運算式也是錯誤的
-- 上述SQL段是錯誤的over查詢出來依別名做列也不可以于where子句中使用
select cqk09 姓名,cqk05 部門,cqk30 薪水,salary_order 排序
from (
select cqk09,cqk05,cqk30,
row_number() over(partition by cqk05 order by cqk30 desc) salary_order
from cqk_file
where cqk03=2012 and cqk031 = 4 and cqk05 in('2G60','2G88')
)cqk_temp_file
where salary_order <= 2
姓名
部門
薪水
排序
BX
2G60
77884
1
AX
2G60
33086
2
SS
2G88
70994
1
DX
2G88
56273
2
row_number() over(partition by col1 order by col2):此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
姓名
部門
薪水
排序
姓名
部門
薪水
排序
姓名
部門
薪水
排序
SI
2BSB
8888
1
SI
2BSB
8888
1
SI
2BSB
8888
1
DI
2BSB
6666
2
DI
2BSB
6666
2
DI
2BSB
6666
2
BP
2BSB
6666
2
BP
2BSB
6666
2
BP
2BSB
6666
3
SP
2BSB
3232
4
SP
2BSB
3232
3
SP
2BSB
3232
4
grouping(expr):用於確定分組結果是否用到了特定的運算式
返回值0表示用到了該運算式,返回值1表死未用到該運算式
grouping_id(expr1[,expr2],,,):用於返回對應于特定行的grouping位向量的值select apa00,apa13,sum(apa31f),grouping(apa13)
from apa_file
group by rollup(apa00,apa13)
order by apa00,apa13
APA00
APA13
SUM(APA31F)
GROUPING(APA13)
11
HKD
23731714.84
0
11
NTD
942131
0
11
RMB
22999119.68
0
11
USD
2180
0
11
47675145.52
1
12
HKD
107141459.6
0
12
NTD
119680
0
12
RMB
69738785.2
0
12
USD
92773.7
0
12
177092698.5
1
…
…
…
…
--一條SQL查詢出所有程式action中英文說明:
select program as "程式代碼", gaz03 as "程式名稱" ,actionResultList as "程式功能清單"
from (select program,substr(max(sys_connect_by_path(action,';')),2) as actionResultList
from (select program,action,rank() over (partition by actionList.program order by actionList.action desc)actionOrder
from (select gap01 as program,gap02||':'||gbd04 as action from gap_file
left join gbd_file on gap02 = gbd01
where gbd03 = '0'
)actionList
)actionOrderList
connect by actionOrder-1 = prior actionOrder and program = prior program
start with actionOrder = 1
group by program
order by program
)actionReusltTable
left join gaz_file on program = gaz01
where gaz02 = '0'
order by program
程式代碼
程式名稱
程式功能清單
1
aapi001
集團代收付基本資料維護作業
query:查詢;output:列印;locale:語言;help:幫助….
2
aapi010
零用金應付帳款系統單據性質維護作業
invalid:無效;insert:新增;authorization:使用者設限…
3
aapi101
應付帳款各期統計開帳作業
previous:上筆;next:下筆;modify:更改...
4
aapi102
應付帳款(依單號)各期統計開帳作業
related_document:相關文件;query:查詢…
5
aapi103
應付帳款系統單據性質維護作業
dept_authorization:部門設限;delete:刪除…
6
aapi104
帳款類別維護作業
query:查詢;qbe_select:條件查詢;qbe_save:條件儲存…
7
aapi105
留置原因維護作業
query:查詢…
8
aapi108
統一編號資料維護作業
exit:結束;delete:刪除;controlz:必要欄位;controlg:開窗查詢…
9
aapi111
零用金應付帳款各期統計開帳作業
previous:上筆;next:下筆;modify:更改insert:新增;delete:刪除…
with cte_oea_file as
(select substr(to_char(oea02,'YYYY/MM/DD'),1,7) po_date,oea032 po_custom,sum(oeb14) po_sales
from oea_file join oeb_file on oea01 = oeb01
where oea032 in ('Tri-Net','AMBER -W','Belkin-C','GTC','SAN SHIN')
group by substr(to_char(oea02,'YYYY/MM/DD'),1,7),oea032
order by 1,2
)
select po_date "接單月份",
sum(decode(po_custom,'Tri-Net',po_sales,0)) "Tri-Net",
sum(decode(po_custom,'AMBER -W',po_sales,0)) "AMBER -W",
sum(decode(po_custom,'Belkin-C',po_sales,0)) "Belkin-C",
sum(decode(po_custom,'GTC',po_sales,0)) "GTC",
sum(decode(po_custom,'SAN SHIN',po_sales,0)) "SAN SHIN"
from cte_oea_file
group by po_date
order by po_date
接單月份
Tri-Net
AMBER -W
Belkin-C
GTC
SAN SHIN
2011/08
768796.48
161573.68
14162.5
319450
10250.96
2011/09
566008.26
221550.9
258366.5
268070
8920
2011/10
270341.68
76241.95
147402
85850
9020
2011/11
464575.39
0
284704
469675
15040
2011/12
295007.55
0
140446.2
918000
21250
2012/01
70835.5
0
0
274850
5100
2012/02
148424.53
0
1425
235255
40690
2012/03
179333.31
0
0
638550
55596.4
2012/04
158162.51
0
0
212000
10110
2012/05
0
0
0
220600
30160
http://blog.csdn.net/yihuiworld