【发布时间】:2018-09-20 01:14:10
【问题描述】:
我想将所有行翻转为列。所以如果有以下 5 列 有 3 个数据行
ACCT_ID NAME PHONE MOBILE ALTERNATIVE_NAME
01 JOE BROWN 0456-9992-6666 07767828432 ZOE BROWN
02 GILL SHARP 0456-9992-6666 07763928432 BILL SHARP
03 ZAC LOWE 0236-9992-5644 07663925672 LUKE LOWE
我希望结果集如下所示。所以有 3 列和 5 行。
COL 标题 (COL1 - COL3) 只是为了更清楚而添加,我不需要 列标题
COL1 COL2 COL3
01 02 03
JOE BROWN GILL SHARP ZAC LOWE
0456-9992-6666 0456-9992-6666 0236-9992-5644
07767828432 07763928432 07663925672
ZOE BROWN BILL SHARP LUKE LOWE
如果知道 acct_id,以下 SQL 将起作用。但我不知道 acct_id,所以需要编写一些动态 sql 来从表 REPORTER.TEMP_PSR_REGION 中选择 acct_id,然后进行数据透视/取消透视。
CREATE TABLE REPORTER.TEMP_PSR_REGION
(
ACCT_ID VARCHAR(50) NOT NULL,
NAME VARCHAR(50) NOT NULL,
PHONE VARCHAR(50) NOT NULL,
MOBILE VARCHAR(50) NOT NULL,
ALTERNATIVE_CONTACT VARCHAR(50) NOT NULL
)
INSERT INTO TEMP_PSR_REGION
(ACCT_ID,
NAME,
PHONE,
MOBILE,
ALTERNATIVE_CONTACT)
VALUES ('01',
'JOE BROWN',
'0456-9992-6666',
'07767828432',
'ZOE BROWN')
INSERT INTO TEMP_PSR_REGION
(ACCT_ID,
NAME,
PHONE,
MOBILE,
ALTERNATIVE_CONTACT)
VALUES ('02',
'GILL SHARP',
'0456-9992-6666',
'07763928432',
'BILL SHARP')
INSERT INTO TEMP_PSR_REGION
(ACCT_ID,
NAME,
PHONE,
MOBILE,
ALTERNATIVE_CONTACT)
VALUES ('03',
'ZAC LOWE',
'0236-9992-5644',
'07663925672',
'LUKE LOWE')
--- PIVOT/UNPIVOT Example
select col1, col2, col3
from (
select t.*, t.acct_id as col_id
from TEMP_PSR_REGION t
)
unpivot
(
value FOR heading in (acct_id, name, phone, mobile, ALTERNATIVE_CONTACT)
)
pivot
(
max(value) for col_id in ('01' as col1, '02' as col2, '03' as col3)
)
order by case heading
when 'ACCT_ID' then 1
when 'NAME' then 2
when 'PHONE' then 3
when 'MOBILE' then 4
when 'ALTERNATIVE_CONTACT' then 5
end
动态 sql 会是什么样子来执行此操作。之前没写过动态sql?
【问题讨论】:
-
谁能帮忙用Oracle的动态sql回答问题?
标签: oracle11g