程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle用法、函數備忘記錄,oracle用法函數備忘

Oracle用法、函數備忘記錄,oracle用法函數備忘

編輯:Oracle教程

Oracle用法、函數備忘記錄,oracle用法函數備忘


Listagg

select * from emp

select LISTAGG(ename,'-') within group (order by deptno desc) from emp;

可以看到功能類似wm_concat,可以自定義連接符,區別:

LISTAGG  : 11g2才提供的函數,不支持distinct,拼接長度不能大於4000,函數返回為varchar2類型,最大長度為4000.

和wm_concat相比,listagg可以執行排序。例如
select deptno, listagg(ename,';') within group(order by ename) enames from emp group by deptno;

with table as

 SQL Code 

1
2
3
4
5
6
7
8
9
10
11
12
13

 

with temp as(
  select 500 population, 'China' nation ,'Guangzhou' city from dual union all
  select 1500 population, 'China' nation ,'Shanghai' city from dual union all
  select 500 population, 'China' nation ,'Beijing' city from dual union all
  select 1000 population, 'USA' nation ,'New York' city from dual union all
  select 500 population, 'USA' nation ,'Bostom' city from dual union all
  select 500 population, 'Japan' nation ,'Tokyo' city from dual 
)
select population,
       nation,
       city,
       listagg(city,',') within GROUP (order by city) over (partition by nation) rank
from temp

With table as 類似創建一個臨時表,只可以查詢一次,之後就被銷毀,同時可以創建多個臨時table,比如:

with sql1 as

(select to_char(a) s_name from test_tempa),

sql2 as

(select to_char(b) s_name

from test_tempb

where not exists (select s_name from sql1 where rownum = 1))

select *

from sql1

union all

select *

from sql2

pivot unpivot

行列轉換,見

Oracle行轉列、列轉行的Sql語句總結

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved