Oracle行转列/行变列

在写一些复杂的SQL的时候,经常需要使用到行变列的技巧,一些帐务系统的统计也经常会写到这样的SQL。主要用到了max、decode或nvl这些函数来达到目的。写下来让大家互相学习学习!下面是一个行变列的例子。

如表ROW2COLUMN2有以下数据:

名字 课程 分数

1 张三 语文 80
2 张三 数学 86
3 张三 英语 75
4 李四 语文 78
5 李四 数学 85
6 李四 英语 78

想变成下面记录:

名字 语文 数学 英语

1 李四 78 85 78
2 张三 80 86 75

----------------------------------------------

CREATE TABLE ROW2COLUMN2(NAME_ VARCHAR2(20),
CLASS VARCHAR2(50),
SCORE NUMBER(3));

INSERT INTO ROW2COLUMN2 VALUES ('张三', '语文', 80);
INSERT INTO ROW2COLUMN2 VALUES ('张三', '数学', 86);
INSERT INTO ROW2COLUMN2 VALUES ('张三', '英语', 75);
INSERT INTO ROW2COLUMN2 VALUES ('李四', '语文', 78);
INSERT INTO ROW2COLUMN2 VALUES ('李四', '数学', 85);
INSERT INTO ROW2COLUMN2 VALUES ('李四', '英语', 78);

SELECT * FROM ROW2COLUMN2;

SELECT NAME_,
MAX(DECODE(CLASS, '语文', T.SCORE, 0)) 语文,
MAX(DECODE(CLASS, '数学', T.SCORE, 0)) 数学,
MAX(DECODE(CLASS, '英语', T.SCORE, 0)) 英语

FROM ROW2COLUMN2 T
GROUP BY NAME_;

猜你喜欢

转载自jqs1124.iteye.com/blog/1492281