oracle 列轉行
CREATE TABLE t_row_str(
ID INT,
col VARCHAR2(10));
INSERT INTO t_row_str VALUES(1,'a');
INSERT INTO t_row_str VALUES(1,'b');
INSERT INTO t_row_str VALUES(1,'c');
INSERT INTO t_row_str VALUES(1,'d');
INSERT INTO t_row_str VALUES(1,'e');
INSERT INTO t_row_str VALUES(2,'a');
INSERT INTO t_row_str VALUES(2,'d');
INSERT INTO t_row_str VALUES(2,'e');
INSERT INTO t_row_str VALUES(3,'c');
INSERT INTO t_row_str VALUES(4,'c');
COMMIT;
SELECT * FROM t_row_str;
---以下的方法需要手工的構造連線字串,因此適合列型別不多的情況。
SELECT id, str
FROM (SELECT id,
row_number() over(PARTITION BY id ORDER BY col) AS rn,
col || lead(',' || col, 1) over(PARTITION BY id ORDER BY col)||
lead(',' || col, 2) over(PARTITION BY id ORDER BY col) ||
lead(',' || col, 3) over(PARTITION BY id ORDER BY col) AS str
FROM t_row_str)
WHERE rn = 1
ORDER BY 1;
-----------------------
-----使用內建sys_connect_by_path函式--------可以一次處理
SELECT t.id id,/*rn, */MAX(substr(sys_connect_by_path(t.col, ','), 2) )str
FROM (SELECT id, col, row_number() over(PARTITION BY id ORDER BY col) rn
FROM t_row_str) t
START WITH rn = 1
CONNECT BY rn = PRIOR rn + 1
AND id = PRIOR id
GROUP BY t.id;
--------------------------------------
SELECT * FROM t_row_str order by id,col
SELECT id,
row_number() over(PARTITION BY id ORDER BY col) AS rn,
col || lead(',' || col, 1) over(PARTITION BY id ORDER BY col) ||
lead(',' || col, 2) over(PARTITION BY id ORDER BY col) ||
lead(',' || col, 3) over(PARTITION BY id ORDER BY col) AS str
FROM t_row_str;
--SELECT t.id id,rn, MAX(substr(sys_connect_by_path(t.col, ','), 2) )str
SELECT t.id id,rn, sys_connect_by_path(t.col, ',') str
FROM (SELECT id, col, row_number() over(PARTITION BY id ORDER BY col) rn
FROM t_row_str) t
START WITH rn = 1
CONNECT BY rn = PRIOR rn + 1
AND id = PRIOR id
GROUP BY t.id;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9236282/viewspace-767991/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle列轉行Oracle
- oracle 11g的行轉列、列轉行Oracle
- oracle行列轉換-行轉列Oracle
- oracle行列轉換-列轉行Oracle
- Oracle行轉列、列轉行的Sql語句總結OracleSQL
- oracle中多列轉行Oracle
- Oracle行轉列函式Oracle函式
- Oracle行轉列的函式Oracle函式
- SQL 行轉列,列轉行SQL
- Mysql - 行轉列、列轉行MySql
- Oracle 行轉列的sql語句OracleSQL
- hive經典案列--top N(行轉列\列轉行)Hive
- sql的行轉列(PIVOT)與列轉行(UNPIVOT)SQL
- oracle行轉列、列轉行、連續日期數字實現方式及mybatis下實現方式OracleMyBatis
- oracle 行變列Oracle
- SQL列轉行SQL
- mysql列轉行MySql
- postgresql 列轉行SQL
- mysql 行轉列MySql
- UltraEdit 列操作及列轉行
- Oracle 11g Pivot函式實現行轉列Oracle函式
- 動態行轉列
- SQL 列行轉換SQL
- DB2行列轉置之行轉列DB2
- Oracle 11g使用UNPIVOT函式實現“列轉行”Oracle函式
- [轉]Oracle陣列的使用Oracle陣列
- Hive行轉列函式Hive函式
- 動態固定行轉列
- mysql基礎 行轉列MySql
- 行轉列的應用
- Kettle實現行轉列
- sql實現行轉列SQL
- Databricks 第11篇:Spark SQL 查詢(行轉列、列轉行、Lateral View、排序)SparkSQLView排序
- oracle按列求乘積(轉)Oracle
- 行列轉換,列行轉換統計
- 老生常談SQL2005語句實現行轉列,列轉行SQL
- 【函式】Oracle12c 列轉行函式使用listagg函式Oracle
- 分隔字串實現列轉行字串