oracle的pivot函数列值转列名后,数字类型为何出现8E-10这种数据?如何解 ...

发布网友 发布时间:2022-04-25 19:32

我来回答

2个回答

懂视网 时间:2022-04-30 06:14

select ‘四川省‘ nation ,‘成都市‘ city,‘第一‘ ranking from dual union all select ‘四川省‘ nation ,‘绵阳市‘ city,‘第二‘ ranking from dual union all select ‘四川省‘ nation ,‘德阳市‘ city,‘第三‘ ranking from dual union all select ‘四川省‘ nation ,‘宜宾市‘ city,‘第四‘ ranking from dual union all select ‘湖北省‘ nation ,‘武汉市‘ city,‘第一‘ ranking from dual union all select ‘湖北省‘ nation ,‘宜昌市‘ city,‘第二‘ ranking from dual union all select ‘湖北省‘ nation ,‘襄阳市‘ city,‘第三‘ ranking from dual ) select * from (select nation,city,ranking from temp)pivot (max(city) for ranking in (‘第一‘ as 第一,‘第二‘ AS 第二,‘第三‘ AS 第三,‘第四‘ AS 第四)); 这样就顺利的实现了操作,其中关键函数pivot,其用法如下 pivot(聚合函数 for 列名 in(类型)) --其中 in(‘’) 中可以指定别名,in中还可以指定子查询,比如 select distinct ranking from temp 当然也可以不使用pivot函数,使用下面的语句同样可以实现效果 with temp as( select ‘四川省‘ nation ,‘成都市‘ city,‘第一‘ ranking from dual union all select ‘四川省‘ nation ,‘绵阳市‘ city,‘第二‘ ranking from dual union all select ‘四川省‘ nation ,‘德阳市‘ city,‘第三‘ ranking from dual union all select ‘四川省‘ nation ,‘宜宾市‘ city,‘第四‘ ranking from dual union all select ‘湖北省‘ nation ,‘武汉市‘ city,‘第一‘ ranking from dual union all select ‘湖北省‘ nation ,‘宜昌市‘ city,‘第二‘ ranking from dual union all select ‘湖北省‘ nation ,‘襄阳市‘ city,‘第三‘ ranking from dual )   select nation, max(decode(ranking, ‘第一‘, city, ‘‘)) as 第一, max(decode(ranking, ‘第二‘, city, ‘‘)) as 第二, max(decode(ranking, ‘第三‘, city, ‘‘)) as 第三, max(decode(ranking, ‘第四‘, city, ‘‘)) as 第四 from temp group by nation; 当然Oracle还提供了unpivot函数,实现列转换的操作,项目中还没有使用,也就没有细细研究了。 参考地址:http://blog.csdn.net/xb12369/article/details/39554935 解决长久以来遇到的问题,心情舒畅,遂记录于此,方便后来查看

 

Oracle行转列(使用pivot函数)

标签:

热心网友 时间:2022-04-30 03:22

所有版本的oracle都可以使用wm_concat()函数 。例:select wm_concat(name) as name from user;

但如果是oracle11g,使用listagg() within group()函数 。例:select listagg(name, ‘,’) within group( order by name) as name from user;

使用wm_Concat:

使用ListAgg:

结果:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com