大家好,欢迎来到IT知识分享网。
方法一: Oracle行转列pivot函数
语法:pivot(任一聚合函数 for 需要转列的值所在列名 in (需转为列名的值))
原数据格式如下:
SELECT
rspfd.FORECAST_YEAR , --年份
rspfd.INDEX_CODE , --指标代码
rspfd.INDEX_VALUE --指标值
FROM RPT_STK_PROFIT_FORECAST_DATA rspfd
WHERE rspfd.FORECAST_ID = 111
行转列pivot函数
--行转列
select
*
from
(SELECT
rspfd.FORECAST_YEAR , --年份
rspfd.INDEX_CODE , --指标代码
rspfd.INDEX_VALUE --指标值
FROM RPT_STK_PROFIT_FORECAST_DATA rspfd
WHERE rspfd.FORECAST_ID = 250717)
pivot(
max(INDEX_VALUE) for INDEX_CODE in ( --INDEX_CODE 即要转成列的字段
'1000001' as INDEX_O1, --max(INDEX_VALUE) 此处必须为聚合函数,
'1000003' as INDEX_O2, --in () 对要转成列的每一个值指定一个列名
'1000008' as INDEX_O3,
'1000009' as INDEX_O4
)
);
方法二:使用MAX DECODE 实现
SELECT
T.FORECAST_YEAR,
max(decode(T.INDEX_CODE,'1000001',T.INDEX_VALUE,'')) AS INDEX_O1,
max(decode(T.INDEX_CODE,'1000003',T.INDEX_VALUE,'')) AS INDEX_O2,
max(decode(T.INDEX_CODE,'1000008',T.INDEX_VALUE,'')) AS INDEX_O3,
max(decode(T.INDEX_CODE,'1000009',T.INDEX_VALUE,'')) AS INDEX_O4
FROM (
SELECT
rspfd.FORECAST_YEAR , --年份
rspfd.INDEX_CODE , --指标代码
rspfd.INDEX_VALUE --指标值
FROM RPT_STK_PROFIT_FORECAST_DATA rspfd
WHERE rspfd.FORECAST_ID = 111) T GROUP BY T.FORECAST_YEAR;
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/14644.html