- 行转列
-
- 场景:查询结果作为字段头出现
- 方式:
-
- 存储过程中,写function拼接
-
- 缺点:需有存储过程的调用
- 使用decode函数进行硬转
-
- 缺点:必须确切的知道该列所有的取值
-
- decode函数行转列用法:
-
-
id class score 1 语文 80 2 数学 70 3 英语 50 4 语文 60
- 需求:统计语文总分,数学总分,英语总分,形成如下表格:
-
语文总分 数学总分 英语总分 140 70 50
- sum/max/min(decode([COL], [VALUE1], [VALUE2])) [COLNAME]
-
- sum/max/min 分组函数,因结果集是多列,根据业务逻辑,取对应的值
- COL 作为转化完成后头的列,在上表中就是class
- VALUE1 COL的值域中的某个值,比如:‘语文’,‘数学’,‘英语’
- VALUE2 想要统计的值,在上表就是score
- COLNAME 转化后的表头,上图就是‘语文总分’,‘数学总分’,‘英语总分’
-
-
-
- 完整写法:
- select
sum(decode(class, '语文', score)) 语文总分,
sum(decode(class, '数学', score)) 数学总分,
sum(decode(class, '英语', score)) 英语总分
from table;
-