注:本文使用的数据库表为oracle自带scott用户下的emp,dept等表结构.
通过一个例子来说明行列转换:
需求:查询每个部门中各个职位的总工资
按我们最原始的思路可能会这么写:
这种结果虽然也能满足要求,但是极难阅读,我们使用oracle中的decode()函数进行改写:
这样的话就实现了需求要求的功能,其实这就是一种行列转换的方式,这是通过decode()函数实现的,是oracle独有的一个函数,如果使用通用的sql语句,那么该如何实现上面的查询结果呢?当然我们可以通过嵌套子查询来实现,只不过麻烦一点,如下:
以上,虽然实现了要求的功能,但我们感觉还是有些复杂,在oracle 11g之后,提供了pivot()函数,专门用来进行行列转换,该函数的使用格式如下:
通过此函数编写的代码: