Oracle数据库中月份从行转列的方法(oracle中月份行转列)

Oracle数据库中月份从行转列的方法

在Oracle数据库中,关于月份从行转列的问题,可以使用自连接或者pivot实现。

1. 自连接

自连接可以将一张表自己连接起来,即使用同一张表中的数据来生成新的数据。使用自连接将月份从行转为列,可以按如下步骤操作:

1)创建表并插入数据

创建一张表,包括编号(id)和月份(month)两列,并插入数据。

“` sql

CREATE TABLE month_table(

id INT,

month VARCHAR2(10)

);

INSERT INTO month_table VALUES(1, ‘Jan’);

INSERT INTO month_table VALUES(1, ‘Feb’);

INSERT INTO month_table VALUES(2, ‘Feb’);

INSERT INTO month_table VALUES(2, ‘Mar’);

INSERT INTO month_table VALUES(3, ‘Mar’);

INSERT INTO month_table VALUES(3, ‘Apr’);

INSERT INTO month_table VALUES(4, ‘Apr’);

INSERT INTO month_table VALUES(4, ‘May’);


2)使用自连接

``` sql
SELECT t1.id,
t1.Jan,
t1.Feb,
t1.Mar,
t1.Apr,
t1.May
FROM (SELECT id, month, id||month new_col FROM month_table) month_pivot
PIVOT(MAX(month) FOR new_col IN ('1Jan', '1Feb', '1Mar', '1Apr', '1May', '2Jan', '2Feb', '2Mar', '2Apr', '2May', '3Jan', '3Feb', '3Mar', '3Apr', '3May', '4Jan', '4Feb', '4Mar', '4Apr', '4May')) t1

执行结果:

ID   JAN  FEB  MAR  APR  MAY 
--- --- --- --- --- ---
4 - Apr May - -
3 - - Mar Apr -
2 - Feb Mar Apr May
1 Jan Feb - - -

2. pivot语句

Oracle 11g引入了pivot语句,可以非常方便地实现数据的行列转换。

“` sql

SELECT *

FROM (

SELECT id, month

FROM month_table

)

PIVOT(

MAX(month)

FOR month IN (‘Jan’ AS Jan, ‘Feb’ AS Feb, ‘Mar’ AS Mar, ‘Apr’ AS Apr, ‘May’ AS May)

)

ORDER BY id


执行结果与使用自连接的结果相同。

数据运维技术 » Oracle数据库中月份从行转列的方法(oracle中月份行转列)