【轉】Oracle: wmsys.wm_concat、sys_connect_by_path、自定義函式實現行列轉換
構建測試表:
Sql程式碼
create table TABLE1
(
ID INTEGER,
NAME VARCHAR2(10)
)
create table TABLE2
(
ID INTEGER,
ROLE VARCHAR2(10)
)
insert into TABLE1 (ID, NAME) values (1, '張三');
insert into TABLE1 (ID, NAME) values (2, '李四');
commit;
insert into TABLE2 (ID, ROLE) values (1, '查詢');
insert into TABLE2 (ID, ROLE) values (1, '分析');
insert into TABLE2 (ID, ROLE) values (1, '決策');
insert into TABLE2 (ID, ROLE) values (2, '查詢');
commit;
要求輸出結果:
Sql程式碼
ID NAME ROLE
張三 查詢,分析,決策
李四 查詢
方法一、使用wmsys.wm_concat
Sql程式碼
select table1.*,wmsys.wm_concat(role) from table1,table2 where table1.id=table2.id
group by table1.id,table1.name
方法二、使用sys_connect_by_path
Sql程式碼
select id, name, ltrim(max(sys_connect_by_path(role, ',')), ',') from
(select row_number() over(partition by table1.id order by name) rn,table1.*, role from table1, table2 where table1.id =
table2.id)
start with rn = 1
connect by prior rn = rn - 1 and prior id = id
group by id, name
order by id
方法三、使用自定義函式
Sql程式碼
create or replace function my_concat(mid in integer) return varchar2 --記住:引數和返回值裡的資料型別都不用定義長度
is
result varchar2(4000); --定義變數,記住Oracle中定義變數不需要
begin
for temp_cursor in (select role from table2 where id=mid) loop --此處在遊標FOR迴圈中使用查詢
result :=result || temp_cursor.role || ','; --Oracle中字元連線使用||,而sql server中用+
end loop;
result := rtrim(result,','); --去掉最後一個空格,還有Oracle中的賦值前面沒有set
return result;
end;
select table1.*,my_concat(table1.id) from table1,table2 where table1.id=table2.id
group by table1.id,table1.name
order by table1.id
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26892340/viewspace-721933/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- wmsys.wm_concat、sys_connect_by_path、自定義函式實現行列轉換函式
- 用ORACLE分析函式實現行列轉換Oracle函式
- wmsys.wm_concat 實現行列轉換問題
- 警示:通過 wmsys.wm_concat 實現行列轉換
- pivot、unpivot實現oracle行列轉換Oracle
- Oracle10g的行列轉換 wmsys.wm_concatOracle
- 試驗Oracle中實現行列轉換的方法(轉)Oracle
- [轉]decode函式和行列互換函式
- Oracle9i中使用SYS_CONNECT_BY_PATH進行行列轉換-Oracle
- Oracle-行列轉換Oracle
- oracle行列轉換-行轉列Oracle
- oracle行列轉換-列轉行Oracle
- Oracle--SQL行列轉換實戰OracleSQL
- oracle行列轉換-多行轉換成字串Oracle字串
- sql 實現表的行列轉換SQL
- 【SQL 分析函式】wm_concat 行列轉換SQL函式
- Oracle 行列轉換 經典Oracle
- Oracle 行列轉換總結Oracle
- Oracle 行列轉換小結Oracle
- Oracle行列轉換總結Oracle
- oracle行列轉換-字串轉換成多列Oracle字串
- oracle行列轉換-多列轉換成字串Oracle字串
- WORD及EXCEL行列轉換實現方法收藏(轉)Excel
- 用oracle分析函式進行行列轉向Oracle函式
- Spark實現行列轉換pivot和unpivotSpark
- 行列轉換
- oracle和mysql的行列轉換OracleMySql
- Oracle 自定義函式Oracle函式
- SQL Server 實現行列(縱橫表)轉換SQLServer
- Oracle OCP(05):轉換函式Oracle函式
- 行列轉換 交叉表 (轉)
- Kettle行列轉換
- 偽行列轉換!
- 行列轉換sqlSQL
- oracle 自定義聚合函式Oracle函式
- Oracle中自定義函式Oracle函式
- Oracle自定義聚集函式Oracle函式
- ORACLE 自定義函式BUG?Oracle函式