今天看到一个题目,要求是行转列,回来查了一下资料
题目要求是把
这样的一张表转换为
这样的表格
首先创建表
CREATE TABLE A (
year VARCHAR2(255),
month VARCHAR2(255),
amount NUMBER
);
然后插入数据
INSERT INTO "A" VALUES ('2016', '1', '1.1');
INSERT INTO "A" VALUES ('2016', '2', '1.2');
INSERT INTO "A" VALUES ('2017', '1', '2.1');
INSERT INTO "A" VALUES ('2017', '2', '2.2');
INSERT INTO "A" VALUES ('2018', '1', '3.1');
INSERT INTO "A" VALUES ('2018', '2', '3.2');
首先执行
SELECT * FROM A;
得到
方法一:使用case语句
SELECT
a."year",
max( CASE a."month" WHEN '1' THEN a."amount" ELSE 0 END ) m1,
max( CASE a."month" WHEN '2' THEN a."amount" ELSE 0 END ) m2
FROM
a
GROUP BY
a."year";
得到