什么是行转列?
比如下面这个查询,查询结果如下
![2af20e945b610d2a0662b0cf17c926e4.png](https://i-blog.csdnimg.cn/blog_migrate/38ce0012134c2bd23089f75fcdb52bf8.jpeg)
但是打报表时,我可能更想看下如下结果
![9aa3dc7c9ccf544cc17b9aa02442bc5c.png](https://i-blog.csdnimg.cn/blog_migrate/9da2c5ff4b1a93d73df92b296349c080.jpeg)
这样打出的报表一目了然,我在哪一年哪个月的数目是多少一目了然,这种需要将查询结果进行行转列显示由于设计的原因是无法避免的。
行转列实现-利用Oracle自带的decode函数进行实现
![c7b2c2cd40c649bb7eb12bc7bb987670.png](https://i-blog.csdnimg.cn/blog_migrate/7bc1e5e55944785b62137d8e62809185.jpeg)
sql以及查询结果
查询sql语句:
select t.year as 年份,
max(decode(t.month,1,t.amount,'')) as 一月份,
max(decode(t.month,2,t.amount,'')) as 二月份,
max(decode(t.month,3,t.amount,'')) as 三月份,
max(decode(t.month,4,t.amount,'')) as 四月份
from t_amount t group by t.year order by t.year desc;
注意
- decode函数用法:decode(表字段,值一,返回值一,值二,返回值二...,缺省值)
- 当字段与值一相等时返回返回值一,依次类推,默认为缺省值(可写可不写,未写则显示为空)
- max函数主要是用于构造分组函数,当然也可以使用min与sum函数,max在此使用的含义是取当前月份的最大值,如果是min则是当前月份的最小值,sum则是求本月的和。