Oracle 11g使用UNPIVOT函式實現“列轉行”
--建立測試表
create table email_signup(
user_account varchar2(100),
signup_date date,
user_email varchar2(100),
friend1_email varchar2(100),
friend2_email varchar2(100),
friend3_email varchar2(100)
);
insert into email_signup
values
('Rjbryla',
to_date('2009-08-21', 'yyyy-mm-dd'),
'rjbryla@example.com',
'rjbdba@example.com',
'pensivepenman@example.com',
'unclebob@example.com');
insert into email_signup
values
('johndoe',
to_date('2009-08-22', 'yyyy-mm-dd'),
'janedoe@example.com',
null,
'dog@example.com',
null);
--查詢表中的內容
--需求:需要將USER_EMAIL、FRIEND1_EMAIL、FRIEND2_EMAIL、FRIEND3_EMAIL都轉到一行上
實現的格式如下:
USER_ACCOUNT | SIGNUP_DATE | EMAIL_ADDRESS
--使用UNPIVOT函式實現列轉行
select user_account, signup_date, src_col_name, friend_email
from email_signup unpivot((friend_email) for src_col_name in(user_email,
friend1_email,
friend2_email,
friend3_email));
--在11g之前,可以使用下面的方法
select user_account,signup_date,'USER_EMAIL' as src_col_name,user_email as friend_email from email_signup
where user_email is not null
union
select user_account,signup_date,'FRIEND1_EMAIL' as src_col_name,user_email as friend_email from email_signup
where friend1_email is not null
union
select user_account,signup_date,'FRIEND2_EMAIL' as src_col_name,user_email as friend_email from email_signup
where friend2_email is not null
union
select user_account,signup_date,'FRIEND3_EMAIL' as src_col_name,user_email as friend_email from email_signup
where friend3_email is not null;
create table email_signup(
user_account varchar2(100),
signup_date date,
user_email varchar2(100),
friend1_email varchar2(100),
friend2_email varchar2(100),
friend3_email varchar2(100)
);
insert into email_signup
values
('Rjbryla',
to_date('2009-08-21', 'yyyy-mm-dd'),
'rjbryla@example.com',
'rjbdba@example.com',
'pensivepenman@example.com',
'unclebob@example.com');
insert into email_signup
values
('johndoe',
to_date('2009-08-22', 'yyyy-mm-dd'),
'janedoe@example.com',
null,
'dog@example.com',
null);
--查詢表中的內容
--需求:需要將USER_EMAIL、FRIEND1_EMAIL、FRIEND2_EMAIL、FRIEND3_EMAIL都轉到一行上
實現的格式如下:
USER_ACCOUNT | SIGNUP_DATE | EMAIL_ADDRESS
--使用UNPIVOT函式實現列轉行
select user_account, signup_date, src_col_name, friend_email
from email_signup unpivot((friend_email) for src_col_name in(user_email,
friend1_email,
friend2_email,
friend3_email));
--在11g之前,可以使用下面的方法
select user_account,signup_date,'USER_EMAIL' as src_col_name,user_email as friend_email from email_signup
where user_email is not null
union
select user_account,signup_date,'FRIEND1_EMAIL' as src_col_name,user_email as friend_email from email_signup
where friend1_email is not null
union
select user_account,signup_date,'FRIEND2_EMAIL' as src_col_name,user_email as friend_email from email_signup
where friend2_email is not null
union
select user_account,signup_date,'FRIEND3_EMAIL' as src_col_name,user_email as friend_email from email_signup
where friend3_email is not null;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26506993/viewspace-2057034/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 11g Pivot函式實現行轉列Oracle函式
- 使用Oracle 11g函式Pivot實現資料聚合行轉列Oracle函式
- Oracle 11g 新聚集函式listagg實現列轉行Oracle函式
- oracle 11g 使用 pivot/unpivot 行列轉換Oracle
- Oracle行轉列函式Oracle函式
- pivot、unpivot實現oracle行列轉換Oracle
- sql的行轉列(PIVOT)與列轉行(UNPIVOT)SQL
- Oracle行轉列的函式Oracle函式
- 【函式】Oracle12c 列轉行函式使用listagg函式Oracle
- oracle 11g的行轉列、列轉行Oracle
- 用listagg函式分組實現列轉行函式
- Hive行轉列函式Hive函式
- 列轉行聚合的簡單實現ORACLE WM_CONCAT LISTAGG函式Oracle函式
- Spark SQL中列轉行(UNPIVOT)的兩種方法SparkSQL
- Spark實現行列轉換pivot和unpivotSpark
- 用ORACLE分析函式實現行列轉換Oracle函式
- oracle行轉列、列轉行、連續日期數字實現方式及mybatis下實現方式OracleMyBatis
- 使用rownum及replace實現行轉列
- Kettle實現行轉列
- sql實現行轉列SQL
- ORACLE單行函式與多行函式之五:轉換函式示例Oracle函式
- Oracle 分析函式使用介紹(轉)Oracle函式
- FlinkSQL使用自定義UDTF函式行轉列-IK分詞器SQL函式分詞
- 分隔字串實現列轉行字串
- 虛擬函式實現原理(轉)函式
- JavaScript 中如何實現函式佇列?(一)JavaScript函式佇列
- oracle 列轉行Oracle
- oracle列轉行Oracle
- PHP不使用任何內建函式實現字串翻轉PHP函式字串
- 使用ASM框架實現統計函式執行時間ASM框架函式
- [Shell] awk 實現列轉行例子
- (函式)實現strstr函式函式
- 使用函式式實現觀察者模式模式函式模式
- oracle 分析函式(轉)Oracle函式
- Oracle分析函式{轉}Oracle函式
- oracle字串函式(轉)Oracle字串函式
- ORACLE函式大全(轉)Oracle函式
- Oracle字串函式--轉Oracle字串函式