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)使用自连接
``` sqlSELECT t1.id,
t1.Jan, t1.Feb,
t1.Mar, t1.Apr,
t1.MayFROM (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
执行结果与使用自连接的结果相同。