oracle 行转列解释与实例

痞子三分冷 提交于 2019-12-26 07:52:33

oracle 行转列实例

相关函数

-- oracle 中decode函数
语法
DECODE(expr, search, result [, search, result ]...  [, default ])
即DECODE(value,if1,then1,if2,then2,if3,then3,...,else)

-- 解释
DECODEexpr逐个比较每个search值。如果expr等于 search,则Oracle Database返回相应的result。如果未找到匹配项,则Oracle返回default。如果default省略,则Oracle返回null。

参数可以是任何数值类型(的NUMBER,BINARY_FLOAT或BINARY_DOUBLE),或字符类型。

如果expr和search是字符数据,那么Oracle使用nonpadded比较语义对它们进行比较。expr,search和result可以是任何数据类型的CHAR,VARCHAR2,NCHAR,或NVARCHAR2。返回的字符串是VARCHAR2数据类型,与第一个result参数的字符集相同。

如果第一search-result对是数字,则Oracle比较所有search-result表达式,第一expr对确定具有最高数字优先级的参数,隐式地将剩余参数转换为该数据类型,并返回该数据类型。

的search,result和default值可以从表达式得出。Oracle数据库使用短路评估。数据库search仅在比较每个值之前评估每个值expr,而不是search在比较任何值之前评估所有值expr。因此,Oracle从不评估a search是否search等于expr。

在比较之前,Oracle会自动将expr每个search值转换为第一个值的数据类型search。Oracle会自动将返回值转换为与第一个相同的数据类型result。如果第一个result具有数据类型CHAR或第一个result为null,则Oracle将返回值转换为数据类型VARCHAR2。

在DECODE函数中,Oracle认为两个空值是等价的。如果expr为null,则Oracle返回result第一个search也为null的。

可在组件的最大数量DECODE的功能,包括expr,searches,results,和default,为255。
————————————————
资料引用:https://blog.csdn.net/yLazL0000/article/details/90081068

实例

-- 新建数据表
create table t_tb_chengji
(
  id NUMERIC(28,16),
  name   VARCHAR(20),
  course VARCHAR(20),
  score NUMERIC(28,16)
)

-- 创建数据
insert into t_tb_chengji (id, name, course, score)
values (1, '张三', '语文', 67)
insert into t_tb_chengji (id, name, course, score)
values (1, '张三', '数学', 76)
insert into t_tb_chengji (id, name, course, score)
values (1, '张三', '英语', 43)
insert into t_tb_chengji (id, name, course, score)
values (1, '张三', '历史', 56)
insert into t_tb_chengji (id, name, course, score)
values (1, '张三', '化学', 11)
insert into t_tb_chengji (id, name, course, score)
values (2, '李四', '语文', 54)
insert into t_tb_chengji (id, name, course, score)
values (2, '李四', '数学', 81)
insert into t_tb_chengji (id, name, course, score)
values (2, '李四', '英语', 64)
insert into t_tb_chengji (id, name, course, score)
values (2, '李四', '历史', 93)
insert into t_tb_chengji (id, name, course, score)
values (2, '李四', '化学', 27)
insert into t_tb_chengji (id, name, course, score)
values (3, '王五', '语文', 24)
insert into t_tb_chengji (id, name, course, score)
values (3, '王五', '数学', 25)
insert into t_tb_chengji (id, name, course, score)
values (3, '王五', '英语', 8)
insert into t_tb_chengji (id, name, course, score)
values (3, '王五', '历史', 45)
insert into t_tb_chengji (id, name, course, score)
values (3, '王五', '化学', 1)

-- 行转列
select name ,
sum(decode(course,'语文',score,0)) 语文,
sum(decode(course,'数学',score,0)) 数学,
sum(decode(course,'英语',score,0)) 英语,
sum(decode(course,'历史',score,0)) 历史,
sum(decode(course,'化学',score,0)) 化学
from t_tb_chengji group by name
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!